#elasticsearch
Вопрос:
У меня есть настройка Elasticsearch для поиска содержимого книг. По большей части он работает, однако часто пропускает отдельные поисковые запросы, особенно в «Заголовке». Например, в одной книге есть раздел под названием «Парки и зоны отдыха», однако с помощью поискового термина «парки» он его не находит.
Это также для моего варианта использования в идеале должно определять приоритет результатов «entryTitle» над результатами «entryContent».
Текущий запрос является:
$params = [
'index' => 'toc_entries',
'type' => '_doc',
'body' => [
'min_score' => '0.1',
'sort' => [
'_score'
],
'_source' => [
'entryTitle',
'entryId'
],
'query' => [
'bool' => [
'filter' => [
'term' => [
'bookSku.raw' => $sku
]
],
'should' => [
[
'match' => [
'entryTitle' => [
'query' => $search_term,
'_name' => 'title'
]
]
],
[
'match' => [
'entryContent' => [
'query' => $search_term,
'_name' => 'body'
]
]
]
]
]
],
'highlight' => [
'pre_tags' => [''],
'post_tags' => [''],
'fields' => [
'entryContent' => new stdClass(),
'entryTitle' => new stdClass()
]
]
]
];
Могут ли какие-либо эксперты по эластичным исследованиям увидеть, где я здесь ошибся?
Заранее спасибо
Редактировать:
Вот структура настройки:
{
"analysis":{
"analyzer":{
"default":{
"type":"english"
}
}
},
"settings":{
"number_of_shards":1,
"number_of_replicas":1
},
"mappings":{
"_default_":{
"dynamic":"strict"
},
"_doc":{
"properties":{
"bookSku":{
"type":"text",
"fields":{
"raw":{
"type":"keyword"
}
}
},
"entryId":{
"type":"text",
"fields":{
"raw":{
"type":"keyword"
}
}
},
"entryTitle":{
"type":"text"
},
"entryContent":{
"type":"text"
}
}
}
}
}
Комментарии:
1. Когда вы говорите, что он не находит его, вы имеете в виду, что он не найден в первых результатах или вообще не найден? Я использую повышение баллов для определения приоритетов полей в поиске, которые аналогичны тому, что вы пытаетесь сделать. Это хорошо работает.