Игорь, доброго времени суток. Подскажите, пожалуйста.
Может я не так понял зачем нужен фильтр?
В запросе ниже основное слово запроса игнорируется и поиск идет уже по содержимому фильтров.
Сам массив фильтров формируется в цикле таким образом:
filterParams.push(JSON.parse('{"match": {' + JSON.stringify(value.path) + ' : '+ JSON.stringify(value.value) + '}}'));
кстати в этом же запросе еще и в сортировке проблема: по asc фильтрует как нужно, а вот по desc - если слов несколько, то фильтровать будет по последнему. что выглядит коряво и пока не понял причину.
sortParams.push({ _score: { order: "desc" }}) - примерно в таком виде приходят.
Я ожидал что выборка по
match: {
_all: searchTerm
},
останется, но будет отфильтрована и уберется все лишнее, что не попадает под условия фильтра.
Все верно, извиняюсь за опечатку, по второму вопросу речь именно о сортировке. Она у меня тоже странно отрабатывает.
Например если сортирую по алфавиту и будет 2 варианта "апельсин дерево" и "дерево апельсин" - то при desc сортировать будет по второму слову.
Далее дополняю запрос фильтрами. В основной запрос отправляю все тот же Ростов, а в фильтры добавляю Манчестер. В итоге в результат поиска выводится 3 строки про Манчестер и ни одной про Ростов.
Во-первых, filter должен находиться на том же уровне, что и query, а не внутри его. Во-вторых, если вы хотите отфильтровать фильтром, то он должен быть завернут в not, а не в and. Другими словами, такой запрос работает:
в js возвращает failed to parse search source. expected field name but got [START_OBJECT] . при том что точно такой же, но с кавычками стандартный для кибаны запрос, отрабатывает корректно.
если фильтры убрать - Ростов находится и в js.
Эх.
В АПИ для js только одно упоминание по filtered , потому изначально filter внутрь и поместил, хотел как в апи указано сделать.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.