Необязательные термины в match_phrase elasticsearch

Я использую elasticsearch 6 и у меня есть следующий запрос

{  
 "query":{  
  "bool":{  
     "should":[  
        {  
           "match_phrase":{  
              "fieldOne":{  
                 "query":"One two three",
                 "slop":10
              }
           }
        },
        {  
           "match_phrase":{  
              "fieldTwo":{  
                 "query":"one two three",
                 "slop":10
              }
           }
        }

     ]
  }
 }
}

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

Однако, если у меня есть документ, в котором есть термин «один» и «два» в fieldOne, приведенное выше не возвращает результатов, поскольку требуется «три».

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

Причина, по которой я выбрал match_phrase, заключается в использовании помоев, которые позволяют терминам находиться в разных позициях в поле, что мне также требуется.


person user2205623    schedule 22.08.2018    source источник


Ответы (1)


если порядок не важен для использования, вам не нужно использовать match_phrase, простой запрос match сделает работу

    {  
       "match":{  
          "fieldOne":{  
             "query":"one two three"
          }
       }
    },

Затем, если вам нужно совпасть как минимум с двумя терминами, вы можете сделать это, используя minimum_should_match:

    {  
       "match":{  
          "fieldOne":{  
             "query":"one two three",
             "minimum_should_match": 2
          }
       }
    },
person Val    schedule 22.08.2018