为什么这个带有must子句的弹性搜索查询没有返回任何文件?

时间:2015-04-03 11:54:11

标签: elasticsearch

我无法获得此弹性搜索查询以返回我希望返回的数据。这是我的问题:

curl -XGET '0.0.0.0:9200/local/candidate/_search?routing=company_1_candidates&pretty' -d '
{
    "query":{
        "filtered": {
            "query": {
                "multi_match": {
                    "fields": [
                        "candidate_name",
                        "candidate_city",
                        "candidate_country"
                    ],
                    "query": "j",
                    "type": "phrase_prefix"
                }
            },
            "filter": {
                "bool": {
                    "must": [
                        {
                            "term": {
                                "company_id": 1
                            }
                        },
                        {
                            "term": {
                                "candidate_city": "Rotterdam"
                            }
                        }
                    ]
                }
            }
        }
    }
}'

当我在must子句中仅使用company_id术语运行此查询时,我找到了此记录:

{"candidate_name":"J Kennis","candidate_id":2,"candidate_tags":[],"candidate_city":"Rotterdam","candidate_country":"Nederland","company_id":1}

但是当我在查询中包含"candidate_city": "Rotterdam"位时,它返回零结果。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

可能是因为candidate_city字段正在使用包含令牌分析器“lower”的分析器进行索引,但术语过滤器未被分析。

如果您将过滤器更改为 "term": {"candidate_city": "rotterdam"} 要么 "match": {"candidate_city": "Rotterdam"} 你可能会收到这份文件。