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
    2-2、深入搜索 -基于词项和基于全文的搜索

关于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 区别?

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

上一篇:18.缓存


下一篇:android用户界面-组件Widget-网络视图WebView