向elasticsearch结果中生成/添加搜索词

muk1a3rh  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(304)

我正在使用动态构造的多个术语执行elasticsearch查询,因此看起来如下所示:

...
must: [
  { terms: { tags_slug: ['term_a', 'term_b'] } },
  ...
]
...

一切都很好,但我想给每个结果加上匹配的术语,例如,如果结果1匹配 term_a ,我想从现在的结果中得到这个术语,比如:

Model.search(...).results[0].matched_term # => 'term_a'
Model.search(...).results[1].matched_term # => 'term_b'

举个例子,elasticsearch有没有可能做到这一点?我可以用ruby来Map结果,但也许还有另一种方法。

iyfjxgzm

iyfjxgzm1#

在目前的星座下,没有。但是自从 terms 查询实际上是一堆布尔值我们可以利用命名查询,例如:

{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "tags_slug": {
              "_name": "term_a",
              "value": "term_a"
            }
          }
        },
        {
          "term": {
            "tags_slug": {
              "_name": "term_b",
              "value": "term_b"
            }
          }
        }
      ]
    }
  }
}

顺从的

[
  {
    "_index":"tags",
    "_type":"_doc",
    "_id":"s0tOBHUBeQiv5rwb5JPA",
    "_score":0.6931472,
    "_source":{
      "tags_slug":"term_a"
    },
    "matched_queries":[        <---
      "term_a"
    ]
  },
  {
    "_index":"tags",
    "_type":"_doc",
    "_id":"tEtPBHUBeQiv5rwbAZPt",
    "_score":0.6931472,
    "_source":{
      "tags_slug":"term_b"
    },
    "matched_queries":[       <---
      "term_b"
    ]
  }
]

相关问题