有很多方法可以分析文本:默认 standard analyzer(标准分析器) 删除大多数标点符号,将文本分成单个单词,并将其减少。例如,标准分析器会将字符串 “Quick Brown Fox!” 改成项 [quick,brown,fox] 。
这个分析过程使得可以在一大块全文中搜索单个单词。
term query(项查询)在字段的倒排索引中查找一个确切的项,它并不知道关于字段 analyzer (分析器)的任何事。这就确保在使用 keyword (关键字)、数字、日期等字段查找值是有用的。当查询全文字段的时候,使用 match query (匹配查询)来替代,它可以清楚的知道字段如何被分析的。
为了演示,尝试下面的例子。首先,创建一个索引,指定字段映射,并索引文档:
①
full_text(全文本) 字段是text(文本) 类型并且将被分析。
②
exact_value (精确值) 字段是keyword(关键字)类型并且不会被分析。
③
full_text(全文本)倒排索引将会包含项列表:[quick,foxes]。
④
exact_value (精确值)倒排索引将会包含精确项:[Quick Foxes!]。
现在,对比一下term query(项查询)和match query(匹配查询)的结果集:
① 该查询匹配到结果,是因为exact_value (精确值)字段包含精确项 Quick Foxes!。
② 该查询没有匹配到结果,是因为full_text(全文本)字段仅包含项 quick和foxes。并不包含精确项 Quick Foxes! 。