ES学习--基于词项term的搜索和基于全文的搜索

 时间:2026-02-14 15:31:26

1、首先创建一个名称为books的索引,并批量加入多条测试文档数据:

// 删除索引

DELETE books


// 创建索引并批量添加数据
POST /books/_bulk
{"index":{"_id":1}}
{"productId":"Deep Learn Linux", "desc":"Linux"}
{"index":{"_id":2}}
{"productId":"Java Thought", "desc":"Java"}
{"index":{"_id":3}}
{"productId":"Netty Actions", "desc":"Netty"

ES学习--基于词项term的搜索和基于全文的搜索

2、基于词项查询--单个词项匹配查询

基于词项查询的语法结构为:

GET /索引名称/_search


{
  "query": {
    "term": {
      "字段名称":{
        "value": "字段值"
      }
    }
  }  
}

图1示:指定字段desc值Linux查询,未获取到任何结果,因为原始数据在加入索引时,默认会进行分词处理,默认的分词器会将分词后的所有词项转化为小写,因此通过Linux无法查询到文档数据。

图2示:根据上述的解释,通过 linux 查询就可以得到相应的文档数据。

ES学习--基于词项term的搜索和基于全文的搜索

ES学习--基于词项term的搜索和基于全文的搜索

3、基于词项查询--多个词项的字符串匹配查询

因为基于词项term的查询,查询串不做任何分词处理,因此如果你的查询串中包含多个词项,无论如何查询都不可能匹配到任何文档数据(图1示)。

那基于词项term的查询,该如何处理多词项查询串的情况呢?可以记住多字段属性来查询(text类型属性默认有一个keyword字段)(图2示)。

ES学习--基于词项term的搜索和基于全文的搜索

ES学习--基于词项term的搜索和基于全文的搜索

4、基于词项查询--跳过算分查询

对于基于词项的查询,通常用于精确匹配,因此算分数值通常并不关键,可以通过 constant score 将其算分过程去掉,对于大数据量查询,可以提高查询效率!

ES学习--基于词项term的搜索和基于全文的搜索

ES学习--基于词项term的搜索和基于全文的搜索

  • 如何将树转化为二叉树
  • 炉石传说修改游戏内语音;多语言;英语;法语等
  • 有序序列折半查找如何构建判定树?
  • 如何把QQ生日从阳历设置为阴历
  • S9赛季英雄联盟ADC伊泽瑞尔EZ玩法
  • 热门搜索
    后背疼怎么回事 口干舌燥是怎么回事 手麻怎么办 眼睛痒是怎么回事 香港身份证号码怎么看 哈弗h6油耗怎么样 微博自动回复怎么设置 欧珀莱的护肤品怎么样 香菇怎么做 我的世界铱矿怎么得