У меня проблема с выделением в Elastic 2.0 и 2.1 - он возвращает больше информации, чем я думаю.
Я создаю запрос типа 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>"
]
}
Как заставить маркер соответствовать моему запросу в обязательном разделе, но игнорировать фильтр? Я считаю, что он должен игнорировать выделение совпадений, которые были частью фильтра, особенно когда он выделяет поля, содержащие значения, которые были запрошены для фильтрации КОНКРЕТНОГО ПОЛЯ, но оно использует значение где угодно в моем документе. Это почему-то кажется неправильным, но, возможно, это мое понимание.
К вашему сведению, если я установлю для require_field_match значение TRUE, то я получу ТОЛЬКО совпадения, соответствующие фильтру, и НЕТ, соответствующие запросу.
Я не могу указать поле, для которого будет генерироваться выделенная информация, в то время как мы используем Elastic как поисковую модель, которая может быть найдена в любом месте, поэтому я не знаю, из какого поля будет возвращен мой результат.
Вы видите, что я делаю не так? Было бы очень признательно понять это.