У меня есть этот поисковый запрос, чтобы найти поисковый запрос "красная собака" в корневом заголовке и описании, а также сопоставить документ вложенных комментариев.

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"
                    ]
                }
            }
        }
    }
}
3
Mark Walsh 6 Мар 2015 в 18:44

2 ответа

Лучший ответ

Оказывается, у меня был чудо-индекс, в котором не было сопоставления для моего типа. Я удалил плагин, и поиск по всем индексам прошел нормально.

0
Mark Walsh 9 Мар 2015 в 10:10

Самый простой способ сделать это - «денормализовать» ваши данные, чтобы у вас было свойство, содержащее счетчик и логическое значение, существует оно или нет. Затем вы можете просто выполнить поиск по этим свойствам.

Например:

{
   "id": 31939,
   "hasAttachments": true,
   "attachmentCount": 2,
   "attachments": [
      {
         "type": "Attachment",
         "name": "txt.txt",
         "mimeType": "text/plain"
      },
      {
         "type": "Inline",
         "name": "jpg.jpg",
         "mimeType": "image/jpeg"
      }
   ]  
}
0
Mogsdad 7 Май 2016 в 14:01