У меня есть базовый индекс Elasticsearch, который состоит из множества статей справки. Пользователи могут искать их в моем приложении Python / Django.
Индекс имеет следующие сопоставления:
{
"mappings": {
"properties": {
"body": {
"type": "text"
},
"category": {
"type": "nested",
"properties": {
"category_id": {
"type": "long"
},
"category_title": {
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
}
}
},
"title": {
"type": "keyword"
},
"date_updated": {
"type": "date"
},
"position": {
"type": "integer"
}
}
}
}
Я в основном хочу, чтобы пользователь мог искать запрос и получать любыерезультаты, соответствующие названию или категории статьи.
Скажем, у меня есть статья под названием "Я не могу вспомнить свой пароль" в категории "Ваша учетная запись".
Если я ищу статьюНазвание точно, я вижу результат. Если я точно ищу название категории, я также вижу результат.
Но если я ищу только «пароль», я ничего не получаю. Что мне нужно изменить в настройке / запросе, чтобы этот запрос (или аналогичные неточные запросы) также возвращал результат?
Мой запрос выглядит так:
{
"query": {
"bool": {
"should": [{
"multi_match": {
"fields": ["title"],
"query": "password"
}
},
{
"nested": {
"path": "category",
"query": {
"multi_match": {
"fields": ["category.category_title"],
"query": "password"
}
}
}
}
]
}
}
}
Я читал другие вопросы и экспериментировал с различными настройками, но пока не повезло. Я не делаю ничего особенного в индексное время с точки зрения подготовки полей, поэтому я не знаю, стоит ли на это смотреть. Я просто использую elasticsearch-dsl
значения по умолчанию.