如何处理弹性搜索查询过多的无关结果?

时间:2017-03-03 16:17:57

标签: elasticsearch full-text-search

我正在尝试为德国电子商务网站实施产品搜索,并且很难找到有关特定问题的正确资源。

我遇到的问题是,搜索部分字词不会返回可行的结果,例如匹配etikett不会导致包含Rolletiketten的文档。 Ngrams引入了太多问题,所以经过一些测试我再次摆脱它们​​。我发现了德语的单词分解并尝试了一些插件。现在我得到了太多完全不相关的结果,例如搜索rolletikett会返回包含möbelrollen的文档,这是完全不同的内容。

虽然我了解大多数机制以及为什么我会得到这些结果,但我不知道如何解决我的问题,因为我似乎无法在网上找到合适的资源来清理云。

一些提示会很棒。谢谢。

3 个答案:

答案 0 :(得分:0)

使用elasticsearch,你应该得到你开箱即用的东西(例如通过通配符搜索)。 也许你正在做一个只搜索整个单词的布尔查询。

我建议通过查询语言的以下链接:

希望有所帮助,基督徒

提示:您提交的文档映射和确切查询将有助于其他人帮助解决您的问题。

答案 1 :(得分:0)

当你说引入ngrams导致问题时,我认为你可能最终对索引施加了太大的压力。更改最小和最大克数值可以帮助实现这一目标。 例如,下面是我正在使用并且表现良好的分析过滤器:

"autocomplete": {
    "type": "edgeNGram",
    "min_gram": "1",
    "max_gram": "10"
} 

这是堆栈溢出的另一个问题,问题陈述不同,但解决方案也与此问题相关:https://stackoverflow.com/a/42592722/3133937

答案 2 :(得分:0)

“现在我得到了太多完全不相关的结果”

尝试使用 min_scoredocs

您的某些 ES 查询可能足够广泛,以至于质量不佳的命中会进入您的结果。只需为分数设置一个阈值就可以帮助他们远离。对我来说,我有很强的 10 分命中率,然后还有大量的 0 分命中率;不需要的。如果您看到这一点,我猜您的查询可能会更有效,但至少 min_score 可以保持绒毛。

GET /myIndex/_search
{
    "from" : 0,
    "size" : 10,
    "min_score": 1,
    "query" : {
      "match": {
        "Title": {
            "query": "Bake a Cake",
            "fuzziness": 2
          }
        }
      }
    }
}