Похоже, вы используете nested
тип данных для messages
.
Для этого вам нужно будет использовать nested query
:
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "messages",
"query": {
"wildcard": {
"messages.message": {
"value": "*nne*",
"boost": 1
}
}
}
}
}
}
Для многополевых запросов вы, вероятно, можете сделать это, используя query_string
, поэтому в основном ваше решение будет использовать query_string
внутри nested query
.
Строка запроса:
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "messages",
"query": {
"query_string": {
"fields": ["messages.message", "messages.subject"],
"query": "*nne*",
"boost": 1
}
}
}
}
}
Запрос DSL
Вы также можете использовать wildcard
, используя Query DSL
, но опять же, вам нужно добавить несколько предложений запроса Я подозреваю, что для каждого поля из соображений производительности подстановочные запросы не поддерживают многополевые запросы.
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "messages",
"query": {
"bool": {
"should": [
{
"wildcard": {
"messages.message": {
"value": "*nne*",
"boost": 1
}
}
},
{
"wildcard": {
"messages.subject": {
"value": "*nne*",
"boost": 1
}
}
}
]
}
}
}
}
}
Обратите внимание, что поиск по шаблону не рекомендуется из-за количества операций регулярного выражения, которые он должен выполнять, и это повлияет на вашу задержку, чтобы получить ответ, вместо этого я рекомендую вам взглянуть на Ngram Tokenizer Таким образом, вы можете использовать простой запрос на совпадение, чтобы получить желаемый результат.
Дайте мне знать, если это поможет!