2015-11-30 3 views
1

У меня проблема с подсветкой в ​​Elastic 2.0 и 2.1 - она ​​возвращает больше информации, чем я думаю.Elastic Search 2.0/2.1 Проблема с подсветкой и запрос Bool

Я строю запрос bool (отфильтровано ключевое слово запроса устарело в 2.0+, поэтому я пытаюсь обновить свой синтаксис). Я создаю раздел должен и раздел в запросе, за которым следует запрос на выделение информации.

В документации говорится, что запрос используется в контексте запроса или контексте фильтра, но маркер не означает такого различия.

Вот мой полностью сформированный запрос:

GET /sample04/_search 
{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "query": { "query_string": { "query": "east west" } } 
       } 
      ], 
      "filter": [ 
       { 
        "terms": {"OwnerId": ["1", "2","3"]} 
       } 
      ] 
     } 
    }, 
    "highlight": { 
     "fields": { 
      "*": { "require_field_match": "false" } 
     } 
    } 
} 

Так что этот запрос работает, как ожидалось - мы запрашивая точки на восток или запад, и мы фильтрации документов на поле Id, который является частью наших требований безопасности , а затем я прошу выделить информацию.

Недостаток, однако, заключается в том, что информация о подсветке содержит хиты каждого экземпляра каждого значения, которое я представил в своем фильтре (в данном случае 1, 2 или 3), который соответствует любому значению в любом поле в любой части моего документа, например:

"highlight": { 
       "SomeTextField": [ 
        "North <em>West</em>" 
       ], 
       "OwnerId": [ 
        "<em>3</em>" 
       ], 
       "SerialNumber": [ 
        "<em>3</em>-<em>3</em>" 
       ], 
       "AssociatedValue": [ 
        "<em>3</em>", 
        "<em>2</em>" 
       ], 
       "RelatedValue": [ 
        "<em>3</em>", 
        "<em>3</em>", 
        "<em>3</em>", 
        "<em>3</em>", 
        "<em>3</em>" 
       ] 
      } 

Как получить маркер в соответствии с моим запросом в разделе необходимости, но игнорировать фильтр? Я убежден, что он должен игнорировать выделение совпадений, которые были частью фильтра, особенно когда он выделяет поля, содержащие значения, которые были запрошены для фильтрации СПЕЦИФИЧЕСКОГО ПОЛЯ, но он использует значение в любом месте моего документа. Это как-то кажется неправильным, но, возможно, это мое понимание.

Как FYI, если я установил require_field_match в TRUE, тогда я ТОЛЬКО получаю хиты, соответствующие фильтру, и NONE, которые соответствуют запросу.

Я не могу указать поле для генерации информации выделения, в то время как мы потребляем Elastic как поиск, когда-то находим какую-либо модель, поэтому я не знаю, откуда будет возвращаться мой результат.

Вы видите, что я делаю неправильно? Это было бы оценили, чтобы понять это.

ответ

2

Для этой цели вы можете использовать highlight query. измените свою основную часть на

"highlight": { 
    "fields": { 
     "*": { 
     "highlight_query": { 
      "query_string": { 
      "query": "east west" 
      } 
     } 
     } 
    } 
    } 
+0

Perfect - спасибо. Именно то, что мне не хватало. – Dexterama

+0

рад, что я могу помочь – ChintanShah25

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