2-2、深入搜索 -基于词项和基于全文的搜索

时间:2021-08-16
本文章向大家介绍2-2、深入搜索 -基于词项和基于全文的搜索,主要包括2-2、深入搜索 -基于词项和基于全文的搜索使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 基于词项和基于全文的搜索
  • 基于 Term 的查询

    Term 是表达语意的最⼩单位。搜索和利⽤统计语⾔模型进⾏⾃然语⾔处理都需要处理 Term

  • 特点

    • Term Level Query: Term Query / Range Query / Exists Query / Prefix Query /Wildcard Query
    • 在 ES 中,Term 查询,对输⼊不做分词。会将输⼊作为⼀个整体,在倒排索引中查找准确的词项,并
      且使⽤相关度算分公式为每个包含该词项的⽂档进⾏相关度算分 – 例如“Apple Store”
    • 可以通过 Constant Score 将查询转换成⼀个 Filtering,避免算分,并利⽤缓存,提⾼性能
  • 例子
    创建index products_test

关于Term 查询的例子
POST /products_test/product/_bulk
{ "index": { "_id": 1 }}
{ "productID" : "XHDK-A-1293-#fJ3","desc":"iPhone" }
{ "index": { "_id": 2 }}
{ "productID" : "KDKE-B-9947-#kL5","desc":"iPad" }
{ "index": { "_id": 3 }}
{ "productID" : "JODL-X-1937-#pV7","desc":"MBP" }

POST /products_test/_search
{
  "query": {
    "term": {
      "desc.keyword": {
        //"value": "iPhone"  查不到结果
        //"value":"iphone"   可以查到
      }
    }
  }
}
上面查询分别返回什么?

term 查询 字段不分词 ,可以再mapping 中设置 keyword

  • 复合查询 Constant Score 转为 Filter
    • 将 Query 转成 Filter,忽略 TF-IDF 计算,避免相关性算分的开销
    • Filter 可以有效利⽤缓存
POST /products_test/_search
{
  //"explain": true,
  "query": {
    "constant_score": {     // 忽视计算分数带来的性能影响
      "filter": {
        "term": {
          "productID.keyword": "XHDK-A-1293-#fJ3"
        }
      }

    }
  }
}

基于全文的查询

  • 基于全⽂本的查找
    • Match Query / Match Phrase Query / Query String Query
  • 特点
    • 索引和搜索时都会进⾏分词,查询字符串先传递到⼀个合适的分词器,然后⽣成⼀个供查询的词
      项列表
    • 查询时候,先会对输⼊的查询进⾏分词,然后每个词项逐个进⾏底层的查询,最终将结果进⾏合
      并。并为每个⽂档⽣成⼀个算分。- 例如查 “Matrix reloaded”,会查到包括 Matrix 或者 reload
      的所有结果。
 post product_test/_search
{
 "query":{
    "match":{
      "desc":{
          "query":"dejxv"
      }
    }
  }
}

match 与 match_phrase 区别?

原文地址:https://www.cnblogs.com/qlsem/p/15149220.html