Full text query VS Term level query

Full text query: 全文查询,用于对分词的字段进行搜索。会用查询字段的分词器对查询的文本进行分词生成查询。可用于短语查询、模糊查询、前缀查询、临近查询等查询场景

Term Query: 在进行 全文检索 的时候,elasticsearch在对索引进行查询之前,会先把查询条件进行分析(如切词、转换大小写),以期尽可能多地查出用户想要的数据,而 term 级别的查询 则只会对倒排索引中存储好的确切的 term 来进行查询,从而只查出精确匹配的结果。简单的说就是检索词不会被分词

term 级的查询通常是用来查询结构化的数据,比如数字,日期,枚举,而不是全文字段。

测试

我们来进行三个查询,首先使用term query来查询小写的lobster, 能查询到结果:

image-20220725070856247

使用term query来查询大写的Lobster,查询不到结果:

image-20220725070922691

使用full text query来查询大写的Lobster,能查询到结果:

image-20220725070954415

为什么会出现上述的情况呢,这是因为使用term query时,对查询条件不会做任何操作。

如果使用lobster查询,会正好命中倒排索引中的关键字,因为倒排索引中的所有词都以小写形式存储

image-20220716142403791

如果term query使用Lobster查询,肯定匹配不上倒排索引了。

而如果使用full text query,会用查询字段的分词器对查询的文本进行分词,Lobster首先会被转换成小写格式:

image-20220716142457652