У меня есть вложенный объект 3-го уровня, как показано ниже, я хочу проиндексировать эти объекты в упругом поиске.Требование заключается в том, что пользователи будут писать ключевые слова для поискового запроса, например «keyword1 keyword2 ...», и я хочу вернуть объекты, в которых есть все эти ключевые слова (на любом уровне, т.е. операция AND).
[
{
"country":[
{
"name":"India",
"ext_code":"91",
"states":[
{
"name":"Karnataka",
"ext_code":"04",
"cities":[
{
"name":"Bangalore",
"ext_code":"080"
}
]
}
]
}
]
}
]
В настоящее время я сохраняю их во вложенном формате, используя следующее сопоставление:
{
"mappings":{
"doc":{
"properties":{
"name": {"type":"text"},
"ext_code": {"type":"text"}
"state" {
"type": "nested",
"properties": {
"name": {"type":"text"},
"ext_code": {"type":"text"}
"city" {
"type": "nested",
"properties": {
"name": {"type":"text"}
"ext_code": {"type":"text"}
}
}
}
}
}
}
}
}
И во время поиска я передаю упругий поиск по вложенному запросу для поиска на всех уровнях, как показано ниже:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "keyword1 keyword2 ...",
"fields": ['name']
}
},
{
"nested": {
"path": 'state',
"query": {
"multi_match": {
"query": "keyword1 keyword2 ...",
"fields": ['state.name']
}
}
}
},
{
"nested": {
"path": 'state.city',
"query": {
"multi_match": {
"query": "keyword1 keyword2 ...",
"fields": ['state.city.name']
}
}
}
}
]
}
}
}
При отправке нескольких токенов для поиска применяется операция ИЛИ, возвращающая документы, содержащие любой из токенов поиска.
Есть ли способ настроить Elastic Search для выполнения операции И длянесколько токенов в поисковом запросе?