【问题标题】:Restrict searching result with matches of multiple fields in ElasticSearch在 ElasticSearch 中使用多个字段的匹配来限制搜索结果
【发布时间】:2019-04-01 11:06:58
【问题描述】:

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

例如,我有 3 个字段 field1field2field3 以及两个搜索词 word1word2。我希望所有文档中的任意两个字段分别与这些单词匹配,例如:

  • field1 匹配 word1field3 匹配 word2,或者
  • field2 匹配 word1field3 匹配 word2,或者
  • field1 匹配 word2field2 匹配 word1,或者
  • ... ...

我应该如何编写查询?

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我认为这应该可行:

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

    【讨论】:

    • 非常感谢。那么是否可以使其解析单词并自动添加multi_match 查询。例如,如果我给出了 3 个而不是 2 个搜索词,那么实际上会添加另一个 multi_match 吗?
    • 是的,您只需要额外的 multi_match 条目,但我认为弹性无法为您做到这一点 - 您需要事先在客户端应用程序中构造查询。
    【解决方案2】:

    请阅读文档: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"}}
                            ]
                        }
                    }
                ]
            }
        }
    }
    

    【讨论】:

    • 对不起,这不是回答我的问题。查询必须匹配 2 个字段中的任何一个。 3 个要点只是示例。我应该在查询中写下所有组合吗?
    • 不,我很累,看错了主题。下一个答案是正确的;)。
    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2015-02-11
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多