Elasticsearch multi_match逗号问题

时间:2013-12-19 06:37:10

标签: elasticsearch

我在项目上使用弹性搜索来完成自动完成功能。

这是合约。

如果我搜索,可以说,keyword =“bird nest”, 我得到了一些我不想得到的结果:

  • x加州鸟巢
  • 在亚特兰大的鸟巢
  • z鸟,巢不可用(这是我不想要的)

有没有办法让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" ]
                }
            }
        }
    }
}

1 个答案:

答案 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进行测试以获得预期的结果。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html