我正在尝试实施德国电子商务网站的产品搜索,并且很难找到有关特定问题的正确资源。
我有一个搜索部分单词的问题不会返回可行的结果,例如匹配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
}
}
}
}
}