ElasticSearch - сопоставьте все условия в любом порядке - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь написать запросasticsearch (v5.1), чтобы проверить, соответствуют ли все токены в поле всем токенам в поисковом запросе , но в любой порядок .

Например, поле может быть:

full_name: 'Will Smith'

И условия поиска Will Smith или Smith Will будут соответствовать. Однако поиск Will или Smith не будет соответствовать.

Я пробовал сопоставлять запросы с оператором and и запросы фраз с slop, но все это гарантировало, что все условия поиска были в поле, а не все термины в поле были в поиске.

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

1 Ответ

0 голосов
/ 06 сентября 2018

Вы должны взглянуть на запрос bool с параметром "imum_should_match ". В вашем случае это будет выглядеть примерно так:

 {   
    "query":{
        "bool" : {
            "should" : [
               {"term" : { "name" : "Will" }},
               {"term" : { "name" : "Smith" }}
             ],
             "minimum_should_match" : 2
          }
       }
    }
}

Это будет соответствовать "Will Smith" и "Smith Will". Если вы хотите искать только Уилла или Смита, вам нужно изменить это на:

 {   
    "query":{
        "bool" : {
            "should" : [
               {"term" : { "name" : "Will" }}
             ],
             "minimum_should_match" : 1
          }
       }
    }
}

На этот раз будет сопоставлено только «Воля». (точное совпадение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...