Что вам нужно сделать, это создать поле Copy_To и отобразить его, как показано ниже.
В зависимости от полей, которые запрашивает query_string
, вам необходимо включить некоторые или all
полей с полем copy_to
.
По умолчанию query_string
выполняет поиск во всех полях, поэтому вам может потребоваться указать copy_to
для всех полей, как показано на рисунке ниже, где для простоты я создал только три поля, title
, field_2
и третье поле content
, которое будет действовать как , скопированное в поле .
Отображение
PUT <your_index_name>
{
"mappings": {
"mydocs": {
"properties": {
"title": {
"type": "text",
"copy_to": "content"
},
"field_2": {
"type": "text",
"copy_to": "content"
},
"content": {
"type": "text",
"fielddata": true
}
}
}
}
}
Образцы документов
POST <your_index_name>/mydocs/1
{
"title": "something1",
"field_2": "something2"
}
POST <your_index_name>/mydocs/2
{
"title": "something2",
"field_2": "something3"
}
Запрос:
Вы получите необходимое количество документов для каждого токена, используя приведенный ниже запрос агрегации, и я использовал Термины агрегации :
POST <your_index_name>/_search
{
"size": 0,
"query": {
"query_string": {
"query": "something1 OR something2 OR something3"
}
},
"aggs": {
"myaggs": {
"terms": {
"field": "content",
"include" : ["something1","something2","something3"]
}
}
}
}
Ответ на запрос:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"aggregations": {
"myaggs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "something2",
"doc_count": 2
},
{
"key": "something1",
"doc_count": 1
},
{
"key": "something3",
"doc_count": 1
}
]
}
}
}
Дайте мне знать, если это поможет!