而文档在倒排索引中存储的是什么值呢?可以通过下面uri进行分析:
有上图可知,倒排索引存储的值实际上是 es 和 book ,而不是 es book 。
注意: 因为是默认被standard analyzer分词器分词,大写字母全部转为了小写字母,并存入了倒排索引以供搜索。term是确切查询, 所以传入的条件要和倒排索引保持一致。
需要注意的是,倒排索引中存储的值为大写的 ES BOOK 。
使用term查询时,查询条件不会进行分词。但是 text 类型的数据,在倒排索引中实际存储的是分词的数据。
term条件的区分大小写,而实际上,text数据经过默认的standard analyzer分词器分词,大写字母全部转为了小写字母,并存入了倒排索引以供搜索。
故不推荐使用term去查询text类型。
term去查询keyword的数据,均不会进行分词,但是需要注意大小写
match查询text类型时,其本质的操作为or。
可等效为:
并且match匹配时,底层分词器会将条件转换为小写,故和text的倒排索引的大小写保持一致。即不区分大小写。
上文说到,match默认使用or的操作。那么如何替换为and操作?
查询到的数据即包含JAVA 也要包含BOOK。
但是非精确匹配。
导入数据
再次执行时,依旧可以查询到 JAVA AND NET BOOK 数据。
and操作,是要求倒排索引中即要包含 java 也需要包含 book 。
match查询keyword操作时,等效term
当match查询text类型时,在底层将会被转换为term操作。
将被转换为: