Запрашивать эластичный поиск с помощью запроса URI, хранящегося в переменной Angular

0

Я создаю поисковое приложение с помощью 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-запрос?

Теги:
elasticsearch

1 ответ

1

Попробуй это:

_search?q=!Content:hello AND userID:1 AND userName:person

Помните, что амперсанды используются для разделения параметров в строке запроса URL (к сожалению, она называется той же, что и строка запроса ElasticSearch, но относится ко всему набору параметров, следующих за знаком? В URL-адресе.) Я думаю, что ваш URL-адрес написан анализируется как

  • URL-адрес 1: q =! Содержимое: привет
  • URL-адрес 2: userID: 1
  • URL-адрес 3: имя_пользователя: человек
  • URL-адрес 4: default_operator = AND

Поскольку userID: 1 и userName: person не интерпретируются как часть параметра q, который содержит строку запроса ElasticSearch, ElasticSearch отбрасывает их.

Что касается документации, параметр q содержит строку запроса ElasticSearch, которая задокументирована на ее собственной странице.

  • 0
    Спасибо, я попробовал это, но это не сработало. Я думаю, что нашел решение, которое заключается в том, чтобы включить «+» между каждым полем запроса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню