У меня есть этот поисковый запрос, чтобы найти поисковый запрос "красная собака" в корневом заголовке и описании, а также сопоставить документ вложенных комментариев.
GET /_all/video/_search
{
"query":{
"bool":{
"should":[
{
"multi_match":{
"query":"red dog",
"fields":[
"Title",
"Description"
],
"type": "cross_fields",
"operator":"and"
}
},
{
"nested":{
"path":"Comments",
"query":{
"multi_match":{
"query":"red dog",
"fields":[
"Comments.Description",
"Comments.Description.folded"
],
"type": "cross_fields",
"operator":"and"
}
}
}
}
]
}
}
}
К сожалению, для меня комментарии иногда оказываются нулевыми, когда я сохраняю их в ElasticSearch. Можно ли выполнить какое-то условие «включить, если документ существует»?
Обновить
Я все еще получаю ту же ошибку
[nested] failed to find nested object under path [Comments]
Когда я пытаюсь запросить, используя существует
GET /_all/video/_search
{
"query":{
"bool":{
"should":[
{
"multi_match":{
"query":"lisa",
"fields":[
"Title",
"Description"
],
"type":"cross_fields",
"operator":"and"
}
},
{
"nested":{
"path":"Comments",
"query":{
"filtered":{
"query":{
"match_all":{}
},
"filter":{
"exists":{
"field":"Comments.Description"
}
}
}
}
}
}
]
}
}
}
Моя карта для всего
{
"en":{
"mappings":{
"video":{
"properties":{
"Comments":{
"type":"nested",
"properties":{
"Description":{
"type":"string",
"analyzer":"english",
"fields":{
"folded":{
"type":"string",
"analyzer":"folding"
}
}
}
}
},
"Description":{
"type":"string",
"analyzer":"english",
"fields":{
"folded":{
"type":"string",
"analyzer":"folding"
}
}
},
"Title":{
"type":"string",
"analyzer":"english",
"fields":{
"folded":{
"type":"string",
"analyzer":"folding"
}
}
}
}
}
}
}
}
И мои настройки
{
"settings": {
"analysis": {
"analyzer": {
"folding": {
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
}
2 ответа
Оказывается, у меня был чудо-индекс, в котором не было сопоставления для моего типа. Я удалил плагин, и поиск по всем индексам прошел нормально.
Самый простой способ сделать это - «денормализовать» ваши данные, чтобы у вас было свойство, содержащее счетчик и логическое значение, существует оно или нет. Затем вы можете просто выполнить поиск по этим свойствам.
Например:
{
"id": 31939,
"hasAttachments": true,
"attachmentCount": 2,
"attachments": [
{
"type": "Attachment",
"name": "txt.txt",
"mimeType": "text/plain"
},
{
"type": "Inline",
"name": "jpg.jpg",
"mimeType": "image/jpeg"
}
]
}
Похожие вопросы
Новые вопросы
elasticsearch
Elasticsearch - это бесплатная и открытая, распределенная, спокойная поисковая система на основе Lucene.