全文检索最重要的两个方面:
- 相关度:根据文档与查询的相关程度对结果集进行排序的能力。相关度可以使用TF/IDF、地理位置详尽程度、模糊相似度或者其它算法计算。
- 分析:将一段文本转换为一组唯一的、标准化了的标记token,用来创建倒排索引、查询倒排索引。
一旦提到相关度和分析,指的都是查询而非过滤!!!
基于短语VS基于全文
所有的查询都会进行相关度计算,但不是所有查询都有分析阶段。
像bool或者function_score这样的查询并不在文本字段执行。
文本查询有两大类:
基于短语的查询Term-based
像term或者fuzzy一类的查询是低级查询,它们没有分析阶段。
这些查询在单一的短语上执行,例如对单词“xxx”的查询会在倒排索引里面精确查找“xxx”这个词,并对每个包含这个单词的文档计算TF/IDF相关度“_score”。也就是说,term查询精确查找特定短语,不匹配短语的其他变形。
全文检索Full-text
match和query_string这样的查询是高级查询,它们对字段进行分析的方式如下:
- 如果检索一个date或者integer字段,则把查询语句作为日期或者整数格式数据;
- 如果检索一个准确值的字符串字段,则把整个查询语句作为一个短语;
- 如果检索一个全文本字段,查询会先用适当的解析器解析查询语句,产生需要查询的短语列表,然后对列表中的每个短语执行低级查询,合并查询结果,得