【问题标题】:ElasticSearch: Labelling documents with matching search termElasticSearch:用匹配的搜索词标记文档
【发布时间】:2016-03-09 12:45:36
【问题描述】:

我正在使用 elasticsearch 1.7,我需要一种方法来标记文档与它们匹配的 query_string 查询的哪个部分。

我一直在尝试突出显示,但发现在某些情况下它会变得有点混乱。我希望用匹配的搜索词标记文档。

这是我正在使用的查询:(注意这是一个 ruby​​ 哈希,后来被编码为 JSON)

{
  query: {
    query_string: {
      fields: ["title^10", "keywords^4", "content"],
      query: query_string,
      use_dis_max: false
    }
  },
  size: 20,
  from: 0,
  sort: [
    { pub_date: { order: :desc }},
    { _score:   { order: :desc }}
  ]
}

query_string 变量基于用户关注的主题,可能类似于:"(the AND walking AND dead) OR (iphone) OR (video AND games)"

我是否可以使用任何选项,以便返回的文档具有与 the walking dead 或 (the AND walking AND dead) 等搜索词匹配的属性

【问题讨论】:

  • 您是否可以选择将顶级 OR 查询分成多个 bool/should 子查询?
  • 我最初使用的是 bool 查询和 should 子查询。然而,有一些用户关注 50 多个主题,因此 JSON 查询变得非常大,并且正在减慢速度。特别是因为我每个术语需要 3 个查询(检查每个字段)。
  • 如果我要切换到使用 bool/should(只是做了一些测试,看起来它仍然相对较快,有大量子查询)。这将如何完成?谢谢

标签: elasticsearch


【解决方案1】:

如果您准备切换到使用bool/should 查询,您可以拆分每个字段的匹配项并使用named queries,然后在结果中您将获得匹配查询的名称。

基本上是这样的:在bool/should 查询中,为每个字段添加一个query_string 查询并命名查询以识别该字段(例如title_query 用于title 字段等)

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "fields": [
              "title^10"
            ],
            "query": "query_string",
            "use_dis_max": false,
            "_name": "title_query"
          }
        },
        {
          "query_string": {
            "fields": [
              "keywords^4"
            ],
            "query": "query_string",
            "use_dis_max": false,
            "_name": "keywords_query"
          }
        },
        {
          "query_string": {
            "fields": [
              "content"
            ],
            "query": "query_string",
            "use_dis_max": false,
            "_name": "content_query"
          }
        }
      ]
    }
  }
}

在结果中,您将在 _source 下方找到另一个名为 matched_queries 的数组,其中包含与返回的文档匹配的查询名称。

"_source": {
    ...
},
"matched_queries": [
    "title_query"
],

【讨论】:

  • 非常感谢。这正是我想要的。
猜你喜欢
  • 2015-12-11
  • 2023-01-30
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多