2015-09-02 4 views
4

В рамках нашего проекта мы используем Spring Data поверх Elastic Search. Мы обнаружили очень интересную проблему с запросами findBy. Если мы передадим строку, содержащую пробел, она не найдет нужный элемент, если мы не поместим строку с кавычками. Например: для getByName (имя строки) мы должны передать getByName ("\" John Do \ ""). Есть ли способ устранить такую ​​избыточную прокладку?Предельные данные Упругий поиск со специальными символами

ответ

1

Я пытаюсь выполнить первые шаги с помощью Spring (Boot Starter) Data ES и наткнулся на ту же проблему, что и у вас, только в моем случае это было: «перепутали вещи». Я узнал, что это часть зарезервированных символов (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters). Цитата, которую вы упомянули, - это именно то решение, которое я использую сейчас. Это приводит в запросе, как это:

{ "from": 0, "query": { "bool": { "must": { "query_string": { "query": "\"John Do\"", "fields": ["name"] } } } } }

(Вы можете использовать это в консоли отдыха или в ElasticHQ, чтобы проверить результат.) коллега предположил, что переход на «термин» запрос:

{ "from": 0, "size": 100, "query": { "term" : { "name": "John Do"
} } }

может помочь избежать цитирования. Я пробовал это с помощью аннотации @Query метода findByName в вашем репозитории. Это будет выглядеть примерно так:

@Query(value = "{\"term\" : {\"name\" : \"?0\"}}") 
List<Person> findByName(String name); 
Смежные вопросы