[英]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.