1、基于 Term 的查询
Term 的重要性
● Term 是表达语意的最⼩单位。搜索和利⽤统计语⾔模型进⾏⾃然语⾔处理都需要处理 Term
● 特点
● Term Level Query: Term Query / Range Query / Exists Query / Prefix Query /Wildcard Query
● 在 ES 中,Term 查询,对输⼊不做分词。会将输⼊作为⼀个整体,在倒排索引中查找准确的词项,并
且使⽤相关度算分公式为每个包含该词项的⽂档进⾏相关度算分 – 例如“Apple Store”
● 可以通过 Constant Score 将查询转换成⼀个 Filtering,避免算分,并利⽤缓存,提⾼性能
多字段 Mapping 和 Term查询
2、复合查询 – Constant Score 转为 Filter
- 将 Query 转成 Filter,忽略 TF-IDF 计算,避免相关性算分的开销
- Filter 可以有效利⽤缓存
3、基于全⽂的查询
基于全⽂本的查找
● Match Query / Match Phrase Query / Query String Query
● 特点
● 索引和搜索时都会进⾏分词,查询字符串先传递到⼀个合适的分词器,然后⽣成⼀个供查询的词项列表
● 查询时候,先会对输⼊的查询进⾏分词,然后每个词项逐个进⾏底层的查询,最终将结果进⾏合
并。并为每个⽂档⽣成⼀个算分。- 例如查 “Matrix reloaded”,会查到包括 Matrix 或者 reload
的所有结果。
Operator
Minimum_should_match
Match Phrase Query
Match Query 查询过程
● 基于词项的查找 vs 基于全⽂的查找
● 通过字段 Mapping 控制字段的分词
● “Text” vs “Keyword”
● 通过参数控制查询的 Precision & Recall
● 复合查询 – Constant Score 查询
● 即便是对 Keyword 进⾏ Term 查询,同样会进⾏算分
● 可以将查询转为 Filtering,取消相关性算分的环节,以提升性能