如何将精确匹配查询与文本搜索查询相结合?

pkmbmrz7  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(282)

我对字段status、location\u id的精确匹配查询如下所示:

{'query': {'constant_score': {'filter': {'bool': {
     'must': [{'bool': {'should': [{'terms': {'status': ['Open', 'not complete']}}]}},
              {'bool': {'should': [{'terms': {'location_id': [1652]}}]}}],
     'must_not': []}}}},
 'sort': [{'id': {'order': 'asc', 'unmapped_type': 'long'}}]}

假设上面的查询返回50条记录,现在在这50条记录中我想在其中一列中搜索一个单词。例如,列是description,单词是test。如何将上述查询与此搜索词查询组合。搜索列可以是必须查询的列(状态/位置)
简而言之,我希望所有状态为open/not complete,位置为\u id==1652的记录和文本中任何位置有单词“test”的descreption字段
我尝试了简单的查询字符串和查询字符串,但出现了错误。不确定我可以把它放在上面的嵌套查询中。
我用match尝试了下面的查询,但没有写入任何记录:

{'query': {'constant_score': {'filter': {'bool': {
     'must': [{'bool': {'should': [{'terms': {'status': ['Open', 'not complete']}}]}},
              {'bool': {'should': [{'terms': {'location_id': [1652]}}]}},
              {'bool': {'should': [{'match': {'description': 'test'}}]}}],
     'must_not': []}}}},
 'sort': [{'id': {'order': 'asc', 'unmapped_type': 'long'}}]}

使用查询字符串的工作查询

{'query': {'constant_score': {'filter': {'bool': {
     'must': [{'bool': {'should': [{'terms': {'status': ['Open', 'not complete']}}]}},
              {'bool': {'should': [{'terms': {'location_id': [1652]}}]}},
              {'query_string': {"default_field": "description",
                                "query": "*test*"}}],
     'must_not': []}}}},
 'sort': [{'id': {'order': 'asc', 'unmapped_type': 'long'}}]}
flseospp

flseospp1#

您可以使用布尔查询
查询匹配与其他查询的布尔组合匹配的文档。
添加索引数据、搜索查询和搜索结果的工作示例。以下搜索查询用于满足您的以下要求:
简而言之,我希望所有状态为open/not complete,位置为\u id==1652的记录和文本中任何位置有单词“test”的descreption字段
索引数据:

{
  "description":"test",
  "status":["open","not connected"],
  "location_id":[1652]
}

搜索查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "description": "test"
          }
        },
        {
          "terms": {
            "status": [
              "open",
              "not complete"
            ]
          }
        },
        {
          "terms": {
            "location_id": [
              "1652"
            ]
          }
        }
      ]
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "stof_63936644",
        "_type": "_doc",
        "_id": "1",
        "_score": 2.287682,
        "_source": {
          "description": "test",
          "status": [
            "open",
            "not connected"
          ],
          "location_id": [
            1652
          ]
        }
      }
    ]

相关问题