我在项目上使用 flex 搜索以完成自动完成功能。
这是交易。
如果我搜索关键字=“bird nest
”,
我收到一些不想得到的结果:
有什么方法可以使elasticsearch不匹配单词之间有逗号的单词吗?
这是我的查询的样子。
{
"from": 0,
"size": 20,
"sort": [
{
"rate": {
"order": "desc"
}
}
],
"query": {
"bool": {
"should": {
"multi_match": {
"query": keyword,
"operator": "and",
"type": "phrase_prefix",
"fields": [ "name.en_US", "name.zh_TW","name.ja_JP","name.zh_CN" ]
}
}
}
}
}
最佳答案
它不是您应该研究的映射。它的分析仪在您的案例中起着至关重要的作用。如果使用默认的标准分析仪,这是预期结果。
请在elasticsearch网站上查看此博客以获取解决方案。
http://www.elasticsearch.org/blog/starts-with-phrase-matching/
您可以使用分析api来测试如何在Elasticsearch服务器中对数据进行 token 化。
curl -XGET 'localhost:9200/test/_analyze?text=this+is+a+test'
上面的代码将使用与测试索引关联的默认索引分析器对“这是一个测试”文本进行分析。
还可以提供一个分析器以使用其他分析器:
curl -XGET 'localhost:9200/test/_analyze?analyzer=whitespace' -d 'this is a test'
请检查以下链接,了解有关分析API的任何问题。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-analyze.html
据我所知,您可以将带字定界符标记过滤器的空白分析器用于实现此目的。尝试不同的参数,并使用分析api进行测试以获得预期结果。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html
关于elasticsearch - Elasticsearch multi_match逗号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674933/