如何在Elasticsearch中查询

问题描述 投票:-1回答:1

我有这样的文件:

{
'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个回答
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中的每个单词生成标记。如果您不需要任何特殊功能,可以使用标准分析仪。

© www.soinside.com 2019 - 2024. All rights reserved.