如何处理Elasticsearch查询的太多无关的结果



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

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

虽然我了解大多数机制以及为什么要获得这些结果,但我不知道如何解决问题,而且似乎我无法在网上找到正确的资源来清除一些云。

一些提示很棒。谢谢。

使用Elasticsearch您应该从包装盒中写出的内容(例如,使用通配符搜索)。也许您正在做一个布尔查询,仅搜索整个单词。

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

  • 入门:http://logz.io/blog/elasticsearch-queries/

  • 详细:https://www.elastic.co/guide/en/elasticsearch/reference/reference/current/query-dsl-query-query-string-query-query.html

希望有帮助,基督徒

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

当您说引入ngrams引起问题时,我认为您可能最终给索引带来了太大的压力。更改最小值和最大克值可以帮助您有所帮助。例如,以下是我正在使用并表现良好的分析过滤器:

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

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

'现在我变得太多了完全无关紧要的结果&quot&quot'

尝试使用min_score:DOCS

您的某些ES查询可能足够广泛,以至于质量较差的命中率使它成为您的结果。只是设定得分阈值有助于使他们陷入困境。对我来说,我的得分很高10次,然后和他们一起获得了一吨得分0命中。不需要的。如果您看到了,我想您的查询可能会更有效,但是至少min_score会使绒毛下降。

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

最新更新