Привет. Я пытаюсь создать предложение "Вы имели в виду", используя нечеткий запрос в Elasticsearch. Например, когда пользователь ищет слово «applo», вместо него будет отображаться «яблоко» (потому что есть название продукта / бренда, которое содержит слово «яблоко»). Поэтому я хочу выделить слово с нечетким соответствием («яблоко») и показать его пользователю.
Это мои свойства:
"properties": {
"brand_name": {
"type": "keyword",
"store": true
},
{
"product_name": {
"type": "keyword",
"store": true
},
}
Это мой запрос:
var should = { "should": [
{
"multi_match": {
"fields": ["product_name", "brand_name"],
"query": "applo",
"fuzziness": 2,
"prefix_length": 1
}
},
{
"query_string": {
"query": "*" + applo + "*",
"fields": ["product_name", "brand_name"]
}
}
],
"minimum_should_match": 1
};
body = {
size: 50,
from: 0,
query: {
bool: should
},
aggs: buildAggregate(),
"highlight": {
"fields": {
"brand_name": {},
"product_name": {}
}
}
};
Нечеткий запрос и запрос отлично работают и дают правильный результат. Однако в результате нет выделенного поля. Чего не хватает в моем запросе или есть что-то изменить в свойствах сопоставления?
Пример данных:
{ took: 67, timed_out: false, _shards: { total: 5, successful: 5,
skipped: 0, failed: 0 }, hits: { total: 2, max_score: null, hits: [
[Object] ] }, aggregations: { brands:
{ doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [Array] },
minimum: { value: 1000 },
maximum: { value: 1000 },
values:
{ doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [Array] } } }
Объект попаданий:
{ _index: 'product',
_type: 'product',
_id: '1',
_score: null,
_source:
{
product_name: 'Apple Watch',
brand_name: 'Apple'
}
}