0

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

已经提交了一个与“ElasticSearch 相关性”相关的错误,我不确定在 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".
4

2 回答 2

1

关于第 1 项和第 2 项,这里没有足够的信息可以确定,但我强烈怀疑您看到了词干提取的结果。如果您的分析仪是 type english,那可能就是这种情况。

词干分析器旨在通过删除前缀、后缀等将单词简化为词干。由于“-ate”是英语中的常见后缀,“citigate”可能会简化为“citig”。语言很复杂,词干分析器并不完美,正如这个例子所证明的那样,但它们通常弊大于利。另一方面,“花旗集团”可能不会被词干分析器更改。

您可以查看英语词干算法的一些文档,以更好地理解这一点。

如果要在查询末尾使用通配符进行搜索,可以使用prefix查询

对于第三名,我不知道为什么它不会选择它,除非您正在寻找的记录是在许多其他好的点击之后才被发现的,得分较低,或者查询可能不是按分数或类似的东西排序。这里还不够我猜。如果您想确保获得多个术语的完全匹配,您可以使用text_phrase查询

于 2013-10-28T15:32:29.033 回答
0

1 和 2 是 ElasticSearch 默认的搜索方式。这不是正则表达式搜索,除非您通过添加 * 作为通配符将其指定为正则表达式搜索。如果您输入“Citig”,它将匹配包含“Citig Inc”或“Citig LLC”等短语的文档,而不是“Citigroup”。基本上,该文件需要有“Citig”作为标记。

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

3,检查它正在搜索的字段是否有关键字分析器。如果是这样,那么它总是在寻找精确匹配,所以这就是它不匹配的原因。如果它是一个标准分析器,那么如果它也有一个空白过滤器,则不应该发生这种情况。要解决此问题,您需要将分析器更改为标准分析器并重新索引数据。或者,您可以对每个标记进行简单的术语过滤查询,但如果您无法重新索引数据,我只会走这条路。ElasticSearch 很难,你的团队最好做好学习的准备:) 过去一年我一直在破解 ElasticSearch,但它仍然让我大吃一惊。

于 2013-10-31T02:00:00.960 回答