Поле фильтрации с несколькими значениями - PullRequest
0 голосов
/ 20 ноября 2018

Как бы я подошел к следующей проблеме: я хочу отфильтровать поле, содержащее несколько значений (например, ["value1", "value2", "value3"]).

Фильтр такжесодержат несколько значений (например, ["value1", "value2"]. Я хочу получить обратно только те элементы, которые имеют то же значение поля, что и фильтр, например. field is ["value1", "value2"] и фильтртакже ["value1", "value2"]

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 21 ноября 2018

Я думаю, что несколько недавно добавленный (v6.1) term_set query (который Val ссылается на вопрос, который он связал в своем комментарии) - это то, что вы хотите.

terms_set, в отличие от обычного terms, имеет параметр для указания минимального количества совпадений, которые должны существовать между поисковыми терминами и терминами, содержащимися в поле.

Дано:

PUT my_index/_doc/1
{ 
    "values": ["living", "in a van", "down by the river"],
}
PUT my_index/_doc/2
{
    "values": ["living", "in a house", "down by the river"],
}

Запрос terms для ["living", "in a van", "down by the river"] вернет вам оба документа: ничего хорошего.terms_set, настроенный на требование всех трех совпадающих терминов (сценарий params.num_terms оценивается как 3), может дать вам только одно совпадающее:

GET my_index/_search
{
    "query": { 
        "terms_set": {
            "values": {
                "terms": ["living", "in a van", "down by the river"],
                "minimum_should_match_script": {
                  "source": "params.num_terms"
                }
            }            
        }
    }
}

ПРИМЕЧАНИЕ: Хотя яиспользуется minimum_should_match_script в приведенном выше примере, это не очень эффективный шаблон.Альтернативный minimum_should_match_field является лучшим подходом, но использование его в примере означало бы пару дополнительных PUT для добавления необходимого поля в документы, поэтому я пошел с краткостью.

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