[英]Yield/add search term to ElasticSearch results
我正在使用动态构造的多个术语执行 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 来完成,但也许还有另一种方法可以做到。
在目前的星座下,没有。 但是由于terms
查询实际上是一堆bool-should,我们可以像这样利用命名查询:
{
"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"
]
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.