【问题标题】:How to query like this in Elasticsearch如何在 Elasticsearch 中进行这样的查询
【发布时间】:2017-12-19 07:13:45
【问题描述】:

我有这样的文件:

{
'body': '',
'date': '',
'agency_id': ''
}

我想获取符合以下条件的文档:

正文包含:

all of ['word1', 'word2 word3', 'word4']  
Or all of: ['word5 word6', 'word7']  
or  all of: ['word8 word9', 'word10']  
And agency_id in ['id1', 'id2', 'id3']  

您能告诉我如何创建这个查询吗?

【问题讨论】:

    标签: elasticsearch elasticsearch-5


    【解决方案1】:

    要实现您想要的,您需要使用两个 must 子句,一个用于body,另一个用于agency_id。在body 的情况下,您可以指定您的三个条件并使用最小值应该匹配为 1。应该是这样的:

    {
      "size" : 10,
      "query" : {
        "function_score" : {
          "query" : {
            "bool" : {
              "must" : {
                "bool" : {
                  "should" : [ {
                    "query_string" : {
                      "query" : "word1 worrd2 word3 word4",
                      "fields" : [ "body" ],
                      "default_operator" : "and"
                    }
                  }, {
                    "query_string" : {
                      "query" : "word5 worrd6 word7",
                      "fields" : [ "body" ],
                      "default_operator" : "and"
                    }
                  }, {
                    "query_string" : {
                      "query" : "word8 worrd9 word10",
                      "fields" : [ "body" ],
                      "default_operator" : "and"
                    }
                  } ],
                  "minimum_should_match" : "1"
                }
              },
              "must" : {
                "query": {
                  "terms" : { "agency_id" : [ "id1", "id2", "id3" ]}
                }
              }
            }
          }
        }
      }
    }
    

    只需确保您使用一些分析器为body 中的每个单词生成标记。如果您不需要任何特殊功能,您可以使用 standard 分析器。

    【讨论】:

    • word2 和 word3 必须被视为一个词,当然 word8 word9。为此该怎么办?
    • 你能在正文中添加一些内容示例吗?
    猜你喜欢
    • 2018-12-11
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多