Мы используем эластичный поиск как для globalsearch, так и quicksearch, с общей конфигурацией.
globalsearch может искать несколько типов, в то время как быстрый поиск будет искать только один тип (это используется универсальнымcomponent).
Один из типов, которые должен искать quicksearch, называется workorder
.У меня есть несколько рабочих заказов, два из них хранятся следующим образом:
{
"_source": {
"name": "70187"
}
}
{
"_source": {
"name": "60255"
}
}
Однако я получаю неожиданное поведение от нечеткости:
- Когда я ищу
6025
,он может соответствовать 60255
. - Когда я ищу
7018
, не может соответствовать 70187
Я использую эту конфигурацию:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"fields": [
"name",
"last_name",
"first_name"
],
"fuzziness": 1,
"max_expansions": 1,
"query": 6025,
"type": "most_fields"
}
},
{
"multi_match": {
"fields": [
"name",
"last_name",
"first_name"
],
"max_expansions": 1,
"query": 6025,
"type": "most_fields"
}
},
{
"multi_match": {
"fields": [
"content",
"description"
],
"max_expansions": 1,
"query": 6025,
"slop": 5,
"type": "best_fields"
}
},
{
"multi_match": {
"boost": 15,
"fields": [
"_id",
"reference",
"mobilenumber",
"phonenumber",
"batchnumber",
"number"
],
"max_expansions": 1,
"query": 6025,
"type": "best_fields"
}
}
]
}
}
}
Почему он это делает?Как это исправить?
РЕДАКТИРОВАТЬ (1)
Я забыл упомянуть, что я использую ElasticSearch 5.6.
РЕДАКТИРОВАТЬ (2)
Видимотолько с двумя упомянутыми мною записями я смог найти оба рабочих заказа очень хорошо.Я удалил индекс, который использовал.
После добавления еще двух моих существующих рабочих заказов мне удалось воспроизвести проблему только с четырьмя записями.
Две добавленные записи:
{
"name" : "70186"
}
{
"name" : "68012"
}
Если важно, идентификаторы этих четырех записей:
- 70186: 9
- 70187: 10
- 60255: 11
- 68012: 12
РЕДАКТИРОВАТЬ (3)
Шаги для воспроизведения: https://gist.github.com/DevMcC/fe890dcbcba806da8086c4811a0db776