调整ElasticSearch中的相关性

时间:2013-10-28 14:03:09

标签: java spring-mvc lucene elasticsearch

我继承了一个应用程序,它有一个搜索组件来查询一些弹性搜索索引。 ElasticSearch是我们团队的黑匣子。除了配置集群启动和elasticsearch.yml文件之外,我们根本不了解它。

有一个与ElasticSearch相关性相关的错误提交'而且我不确定elasticsearch需要进行哪些更改。有人可以就这个问题做出评论吗?我们刚刚开始学习弹性搜索。

1). Typing "Citig" returns only one result - "CITIGATE BROAD STREET 
    INC." and does not return Citigroup 
2). Typing "Citigr" to "Citigrou" returns nothing. It's not until 
    you type "Citigroup" that  you get multiple hits
3)."FORD MOTOR COMPANY" brings many relevant results, but strangely does not bring up 
    "FORD  MOTOR COMPANY".

2 个答案:

答案 0 :(得分:1)

关于第1项和第2项,这里没有足够的信息可以肯定,但我强烈怀疑你是否看到了结果。如果您的分析仪类型为english,则可能就是这种情况。

一个词干分析器旨在通过删除前缀,后缀等来减少单词的词干。由于“-ate”是英语中的常见后缀,“citigate”可能会缩减为“citig”。语言很复杂,词干不完美,正如这个例子所证明的那样,但它们通常比伤害更有益处。另一方面,“花旗集团”可能并未被限制器改变。

您可以查看English Steming algorithm的一些文档,以便更好地了解这一点。

如果您想在查询结尾处使用通配符进行搜索,可以使用prefix query

对于第三,我不知道为什么它不会被选中,除非您正在寻找的记录是在很多其他好的点击之后找到的,得分较低,或者查询没有按分数排序,或者那种性质的东西。这里还不够我猜。如果您想确保在多个字词上获得完全匹配,可以使用text_phrase query

答案 1 :(得分:0)

1和2只是默认情况下ElasticSearch中的搜索工作方式。除非您通过添加*作为通配符将其指定为正则表达式搜索,否则它不是正则表达式搜索。如果您输入“Citig”,它将匹配包含“Citig Inc”或“Citig LLC”等短语的文档,而不是“花旗集团”。该文件基本上需要“Citig”作为代币。

现在,如果您进行了正则表达式搜索而不是常规搜索,那么它将与花旗集团匹配,但这不是默认的搜索行为。你需要改变它。

3,检查它搜索的字段是否有关键字分析器。如果是这样,那么它总是寻找完全匹配,所以这就是为什么它不匹配。如果它是标准分析器,如果它也有空白过滤器,则不应该发生。要解决此问题,您需要将分析仪更改为标准分析仪并重新索引数据。或者,你可以只为每个令牌做一个简单的术语过滤查询,但是如果你不能重新索引数据,我只会去那条路线。 ElasticSearch很难,你的团队最好准备学习:)过去一年我一直在攻击ElasticSearch,但它仍然令我难以理解。