Вы можете просто определить, car_brand
в качестве ключевого слова и выполнить поиск после фильтрации по полю car_brand
, это будет:
- Сократить количество документов для поиска только в указанном бренде c в соответствии с вашим требованием и меньшее количество документов для поиска означает более быстрый поиск.
- Фильтры кэшируются в Elasticsearch, поэтому в следующий раз, когда вы отфильтруете тот же термин, например,
mercedes
, он получит из кэша, что Быть достаточно быстрым по сравнению с повторной фильтрацией данных.
Определение индекса
{
"mappings": {
"properties": {
"brand": {
"type": "keyword" --> note
},
"title": {
"type": "text"
}
}
}
}
Пример индекса выполнения c
{
"title" : "mercedes benz e 330",
"brand" : "mercedes"
}
{
"title" : "fortuner",
"brand" : "toyota"
}
Поисковый запрос
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "mercedes benz e 330"
}
}
],
"filter": [
{
"term": {
"brand": "Mercedes" --> filter `Mercedes` brand and then do search
}
}
]
}
}
}
Результат
"hits": [
{
"_index": "so_query_car",
"_type": "_doc",
"_id": "2",
"_score": 1.2401118,
"_source": {
"title": "mercedes benz e 330",
"brand": "mercedes"
}
}
]