ElasticSearch搜索结果不正确

我用ES搭建了一个搜索引擎的demo,用IK做的分词,对内容做term查询,大部分情况下结果都是正确的,但是有时会查不出结果,比如说,我查“驻外记者”这个词,返回结果为0,但是我的文档库里肯定是有“驻外记者”出现的,我把文档导入到mysql中,用模糊查询是能返回结果的,ES里就没有,但是相同的情况比如我查“恐怖袭击”返回结果就是正确的,搞不清楚问题出在哪。头一次用ES,对这个工具不太熟悉,不知道有没有人遇到和我同样问题的?

英文是否正常,检查下是不是分词的原因。

应该不是分词的问题,测试过分成“驻外”和“记者”两部分,然后到数据库里like这两个词就能查到,但是ES就死活找不到,很奇怪。但大多数词比如“恐怖袭击”就很正常的返回了,跟like的结果是一样的。

http://www.vpsee.com/2014/05/install-and-play-with-elasticsearch/

这是因为“驻外记者”这个词不在ik的词典里。用分词器之后,term只能查到切分后的词,所以能查到“驻外”或者“记者”。这确实是个坑。一种解决方法是不用Term而是用QueryString的方式查询。QueryString会调用ik分词器将“驻外记者”切分后查询,缺点是匹配上其中任意一个词就算命中,不过可以按相关性Score排序。