【问题标题】:Elasticsearch query match + term booleanElasticsearch 查询匹配 + 术语布尔值
【发布时间】:2020-11-16 23:08:05
【问题描述】:

我在弹性搜索索引中有一个带有“类型”字段的文档,如下所示:

[
  {
    "id": 1,
    "serviceDescription": "a bunch of text",
    "serviceTitle": "title",
    "serviceTags":["tag1","tag2"]
    "type":"service"
  },
  {
    "id": 2,
    "companyDescription": "a bunch of text more",
    "companyTitle": "title",
    "companyTags":["tag1","tag2"]
    "type":"company"
  },...
]

我想对索引中的所有文档运行匹配查询,如下所示:

body = {
    "query": {
        "match": {
            "_all":"sequencing"
        }
    }
}

但添加一个过滤器以仅返回“类型”字段等于“服务”的结果。

【问题讨论】:

  • 您要在文档的所有字段中搜索sequencing 查询字符串吗?您能否解释一下添加一个过滤器以仅返回“类型”字段等于“服务”的结果。

标签: elasticsearch


【解决方案1】:

据我所知,您想在所有字段中查询 sequencing 查询字符串,为此 您可以使用基于匹配查询的multi_match query 来允许多字段查询。

如果未提供任何字段,则 multi_match 查询默认为 index.query.default_field 索引设置,默认为 *. 这会提取映射中符合术语查询条件的所有字段并过滤元数据字段。然后所有提取的字段 结合起来构建一个查询。

搜索查询:

    {
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "bunch of text"
          }
        }
      ],
      "filter": {
        "term": {
          "type": "service"
        }
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "64867032",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.8630463,
        "_source": {
          "id": 1,
          "serviceDescription": "a bunch of text",
          "serviceTitle": "title",
          "serviceTags": [
            "tag1",
            "tag2"
          ],
          "type": "service"
        }
      }
    ]

【讨论】:

  • @Brian Guan 你有机会看我的回答吗,期待得到你的反馈:)
  • 不,我想搜索所有字段,但只有返回字段是“类型”字段值等于某事
  • 所以在我提供的两个文档中,一个有类型:服务,一个有类型:公司。我想添加一个过滤器只返回类型:服务,所以例如:查询:“一堆文本”,只返回第一个文档。
  • @BrianGuan 请仔细阅读我的更新答案,如果这能解决您的问题,请告诉我?
  • @BrianGuan 好久不见了。我希望你做得很好?你有机会通过我的回答吗,期待得到你的反馈:)如果我的回答帮助你解决了你的问题,那么请不要忘记投票并接受答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多