Full text query
: 全文查询,用于对分词的字段进行搜索。会用查询字段的分词器对查询的文本进行分词生成查询。可用于短语查询、模糊查询、前缀查询、临近查询等查询场景
Term Query
: 在进行 全文检索 的时候,elasticsearch在对索引进行查询之前,会先把查询条件进行分析(如切词、转换大小写),以期尽可能多地查出用户想要的数据,而 term 级别的查询 则只会对倒排索引中存储好的确切的 term 来进行查询,从而只查出精确匹配的结果。简单的说就是检索词不会被分词
term 级的查询通常是用来查询结构化的数据,比如数字,日期,枚举,而不是全文字段。
我们来进行三个查询,首先使用term query来查询小写的lobster
, 能查询到结果:
使用term query来查询大写的Lobster
,查询不到结果:
使用full text query来查询大写的Lobster
,能查询到结果:
为什么会出现上述的情况呢,这是因为使用term query时,对查询条件不会做任何操作。
如果使用lobster
查询,会正好命中倒排索引中的关键字,因为倒排索引中的所有词都以小写形式存储:
如果term query使用Lobster
查询,肯定匹配不上倒排索引了。
而如果使用full text query,会用查询字段的分词器对查询的文本进行分词,Lobster
首先会被转换成小写格式: