起因:
使用了一次term查询想进行完全匹配,失败了。
经过:
经过多方调查(虽然也没有很多)发现原因如下:
我想要进行查询的字段在创建mapping时使用的“text”数据类型进行创建。
众所周知text类型的数据在elasticsearch中会进行分词并建立倒排索引,因此它会对每个词进行索引,而不会建立整个句子的索引。
term搜索时会对整个句子作为关键词进行搜索,由于没有建立整个句子的关键词索引,因此无法查找到东西。
结果:
解决方法:
有人说没有方法,只能重新建mapping,建mapping的时候改成别的类型。
我将term搜索改为match_phrase搜索,match_phrase搜索相当于sql语句里面的“like”。这种查询长文本的时候会很慢,不过可以用来搜索标题之类的查询
由于我的数据样本每个标题和每个标题都不同,标题之间也没有明显的包含关系,因此之间拿来当term用了。
不具有普遍性,换其它数据可能不适用,但是总之我可以先凑合。