В настоящее время я пытаюсь использовать filter
в существующем экземпляре ElasticSearch через библиотеку elasticutils
. К сожалению, я никуда не буду. Я не уверен, проблема в том, что я сделал что-то не так, или если в библиотеке есть проблема (возможно, AFAICT).ElasticSearch с фильтром через эластичные резисторы
У меня есть индекс со специфическим отображением, содержащий поле (скажем, «A») строки типа (без явного анализатора). Это поле всегда содержит список строк.
Я хотел бы, чтобы фильтровать документы, содержащий данную строку в этом поле А, поэтому я попытался:
import elasticutils as eu
es = eu.S().es(urls=[ URL ]).indexes(INDEX).doctypes(DOCTYPE)
f = eu.F(A="text")
result = es.filter(f)
Но что возвращает пустой результирующий набор. Я также пробовал его с помощью f = eu.F(A__in="text")
, но это привело к появлению большого сообщения об ошибке, наиболее интересной составляющей которого является [terms] filter does not support [A]
.
Мне интересно, нужно ли мне настроить свой индекс по-другому, может быть, мне нужно создать грань, чтобы иметь возможность использовать фильтр? Но в документации, которую я читал, я не нашел никакого намека на это.
Моя причина для желающих использовать filter
в том, что они могут быть объединены свободно используя and
, or
и not
. Я также нашел некоторые спецификации, описывающие, что query
также может быть логическим, но они обычно относятся к must
, should
и must_not
, которые, по моему мнению, недостаточно гибки для меня. Но я также нашел некоторые спецификации, в которых упоминался флаг operator
для query
s, который может быть установлен на and
или or
. Любая информация по этому поводу приветствуется.
Итак, мои вопросы сейчас:
- Это проблема конфигурации? У фасетов есть какое-то отношение к этому?
- Я хотел бы проверить, является ли это ошибкой библиотеки, пропуская библиотеку, так как я могу выполнить это действие фильтрации, используя, скажем, завиток? Или любая другая библиотека (возможно,
pyes
)? - Является ли гибкое объединение (используя
and
,or
,not
и их группировки) из нескольких возможных запросов (то есть без использования фильтров вообще)? Как мне это сделать? (Предпочтительно вelasticutils
, но другие синтаксисы библиотек, например,pyes
, или простые CURL также приветствуются).
Могу ли я предложить вам взглянуть на плагин Sense (https://chrome.google.com/webstore/detail/sense/doinijnbnggojdlcjifpdckfokbbfpbo?hl=ru) для Chrome? Это отличный инструмент для работы с кластером ES, а не с CURL. Кроме того, я бы рекомендовал начинать с поиска пиеловатиков, а не с того, что кажется слишком абстрактным - по крайней мере, для начала (http://pyelasticsearch.readthedocs.org/). :) –
Я не очень хорошо знаю эту библиотеку - есть ли способ увидеть JSON, который он использует для запроса ES? – argentage