如何在Elasticsearch中查询

时间:2017-12-19 07:13:46

标签: elasticsearch elasticsearch-5

我有这样的文件:

{
'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']  

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

1 个答案:

答案 0 :(得分:0)

要实现您的目标,您需要使用两个必须子句,一个用于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内的每个单词生成令牌。如果您不需要任何特殊功能,可以使用标准分析器。