【问题标题】:Yield/add search term to ElasticSearch results在 ElasticSearch 结果中生成/添加搜索词
【发布时间】:2021-01-22 17:35:24
【问题描述】:

我正在使用动态构建的多个术语进行 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,但也许还有另一种方法。

【问题讨论】:

    标签: ruby-on-rails elasticsearch elasticsearch-rails


    【解决方案1】:

    在目前的星座下,没有。但是由于terms 查询实际上是一堆布尔值,我们可以像这样利用named queries

    {
      "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"
        ]
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 2015-11-11
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多