我在项目上使用弹性搜索来完成自动完成功能。
这是合约。
如果我搜索,可以说,keyword =“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" ]
}
}
}
}
}
答案 0 :(得分:0)
它不是你应该研究的映射。它的分析仪在您的案例中起着至关重要的作用。如果您使用的是默认的标准分析仪,这是预期的结果。
请在elasticsearch网站上查看此博客以获得解决方案。
http://www.elasticsearch.org/blog/starts-with-phrase-matching/
您可以使用analyze api来测试如何在elasticsearch服务器中对数据进行标记化。
curl -XGET 'localhost:9200/test/_analyze?text=this+is+a+test'
以上将使用与测试索引关联的默认索引分析器对“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
据我所知,您可以使用带有字分隔符令牌过滤器的空白分析器来实现这一点。尝试不同的参数并使用analyze api进行测试以获得预期的结果。