Я создаю поисковое приложение с помощью Elastic Search. Я планирую использовать Angular для отправки запросов в приложение с использованием функции Angular $ http.get и запроса URL-адреса эластичного поиска. Поэтому, чтобы получить все записи, где поле userID = 1, я бы запросил:
Задайте угловую переменную $ http.get для:
elasticsearch:9200/application/_search?q=userID:1
Это прекрасно работает, однако все становится неудобно, когда я хочу включить другие запросы Bool в один и тот же запрос.
Итак, если я хочу запросить для всех записей, где userID = 1 AND userName = person, которые не содержат слово "hello", я создаю Angular $ http.get следующим образом:
elasticsearch:9200/application/_search?q=!Content:hello&userID:1&userName:person&default_operator=AND
Но это не возвращает желаемый результат.
Я думаю, что это проблема с первым выражением, которое является НЕ-поиском, который, кажется, задает весь запрос в запросе NOT, а не (НЕ ХОРОШИЙ контент) И (userID = 1) AND (имя пользователя = человек), что и есть то, что я хочу найти.
Документация по elasticsearch для использования URL-запроса ограничена, и я не могу найти что-либо о том, как создать такой поиск.
Должен ли я использовать DSL propper от java-клиента elasticsearch и вообще не использовать URL-запрос?
Попробуй это:
_search?q=!Content:hello AND userID:1 AND userName:person
Помните, что амперсанды используются для разделения параметров в строке запроса URL (к сожалению, она называется той же, что и строка запроса ElasticSearch, но относится ко всему набору параметров, следующих за знаком? В URL-адресе.) Я думаю, что ваш URL-адрес написан анализируется как
Поскольку userID: 1 и userName: person не интерпретируются как часть параметра q
, который содержит строку запроса ElasticSearch, ElasticSearch отбрасывает их.
Что касается документации, параметр q
содержит строку запроса ElasticSearch, которая задокументирована на ее собственной странице.