通过ElasticSearch中多个字段的匹配来限制搜索结果

时间:2019-04-01 11:06:59

标签: elasticsearch

我正在尝试在不同文档字段中使用多个搜索词来限制搜索结果。

例如,我有3个字段field1field2field3,还有两个搜索词word1word2。我想让所有文档的任意两个字段分别与这些单词匹配,例如:

  • field1匹配word1,而field3匹配word2,或者
  • field2匹配word1,而field3匹配word2,或者
  • field1匹配word2,而field2匹配word1,或者
  • ... ...

我应该如何编写查询?

顺便说一句。我正在使用ElasticSearch 5.x。

2 个答案:

答案 0 :(得分:1)

我认为这应该可行:

{
    "query": {
        "bool": {
            "must": [{
                    "multi_match": {
                        "query": "word1",
                        "fields": ["field1", "field2", "field3"]
                    }
                },
                {
                    "multi_match": {
                        "query": "word2",
                        "fields": ["field1", "field2", "field3"]
                    }
                }
            ]
        }
    }
}

答案 1 :(得分:0)

请阅读文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

{
    "query": {
        "bool": {
            "should": [
                {
                    "bool": {
                        "must": [
                            {"term": {"field1 ": "word1"}},
                            {"term": {"field3 ": "word2"}}
                        ]
                    }
                },
                {
                    "bool": {
                        "must": [
                            {"term": {"field2 ": "word1"}},
                            {"term": {"field3 ": "word2"}}
                        ]
                    }
                },
                {
                    "bool": {
                        "must": [
                            {"term": {"field1 ": "word2"}},
                            {"term": {"field2 ": "word1"}}
                        ]
                    }
                }
            ]
        }
    }
}