2015-06-03 2 views
-1
  1. Я пытаюсь написать запрос, который будет соответствовать несколько имен, The ниже запроса это хорошо, но это не точно совпадающее, например, это также дает результаты с именем «XA» или 'BY', где я хочу, чтобы имя было точным A или точным B.Can, кто-нибудь сказал мне, что я делаю неправильно.
  2. является также возможным, чтобы соответствовать нескольким полям, как Name = A или Фамилия = A или Name = б или фамилия = ЬBOOL фильтр Elasticsearch с оператором И

    { 
        "filter": { 
           "bool": { 
            "should": [ 
            { 
             "term": { 
             "Name": "A" 
             } 
            },{ 
             "term": { 
             "Name": "B" 
             } 
            } 
            ] 
           } 
           },"sort": [ 
           { 
            "Pub": { 
            "Rank": "desc" 
            } 
           } 
           ] 
          } 
    

ответ

0

В логическом запросе must означает, что все запросы должны оценить true (это похоже на логическое И), а should означает, что хотя бы один должен оценивать значение true (так же, как логическое ИЛИ).

  1. Чтобы иметь точное совпадение имени, вы должны использовать Keyword analyzer. Это остановит имена, обозначаемые в пробеле, так что «William RIker» будет проиндексирован как (Keyword Analyzer) [«William Riker»] или (анализатор по умолчанию) [«William», «Riker»]. В случае по умолчанию он будет соответствовать термину query либо «William», либо «Riker». В случае с ключевым словом оно будет соответствовать только полному имени.

  2. Чтобы сделать то, что вы хотите, «Name = A или Surname = A или Name = b или Surname = b», тогда вы можете сделать предложения 4.

 
    { 
     "bool":{ 
      "should":[ 
      { 
       "term":{ 
        "Name":"A" 
       } 
      }, 
      { 
       "term":{ 
        "Name":"B" 
       } 
      }, 
      { 
       "term":{ 
        "Surname":"A" 
       } 
      }, 
      { 
       "term":{ 
        "Surname":"B" 
       } 
      } 
      ] 
     } 
    } 
+0

Я попробовал запрос с '' должны, но не везло до сих пор все еще не соответствует «Уильям» или «Райкеру» – Ironman

+0

Мой ответ на ваш вопрос часть 1 объясняет, почему. – monkjack

+0

Как обновить отображение имени и сделать его not_analyzed по текущему индексу? – Ironman

Смежные вопросы