覆盖Elasticsearch中的搜索要求

时间:2013-11-08 01:46:17

标签: elasticsearch

我们搜索索引中的以下字段:

  • individual_name (字符串)
  • organisation_name (字符串)
  • 个人资料(字符串)
  • locations (字符串)
  • 全国(布尔)

如果用户在“汉密尔顿”中搜索“验光师”,并且我们索引中的验光师已将自己列为“全国范围内”(但在汉密尔顿中没有具体说明),则理想的行为是验光师会出现汉密尔顿结果 - 有效地忽略了位置要求。

我们目前正在运行multi_match查询,其中一个示例如下。

{
    "query": {
        "filtered" : {
            "query" : {
                "multi_match": {
                    "query": "optometrist",
                    "zero_terms_query": "all",
                    "operator": "and",
                    "fields": [
                        "individual_name^1.2",
                        "organisation_name^1.5",
                        "profile",
                        "accreditations"
                    ]
                }
            },
            "filter": {
                "and": [{
                    "term": {
                        "locations" : "hamilton"
                    }
                }],
            }
        }
    }
}

如何修改此内容,以便为此查询返回包含"nationwide": "yes"的文档,无论其位置如何?

我在or下尝试了and查询,但当然忽略了multi_match

1 个答案:

答案 0 :(得分:1)

我认为这会给你带来理想的结果:

{
    "query": {
        "filtered" : {
            "query" : {
                "multi_match": {
                    "query": "optometrist",
                    "zero_terms_query": "all",
                    "operator": "and",
                    "fields": [
                        "individual_name^1.2",
                        "organisation_name^1.5",
                        "profile",
                        "accreditations"
                    ]
                }
            },
            "filter": {
                "or": [
                        {"term": {"locations" : "hamilton"}},
                        {'term' : {'nationwide' : 'yes'}}        
                 ],
            }
        }
    }
}