Запросы эластичного поиска в Java: запрос Contains-String? - PullRequest
0 голосов
/ 08 мая 2018

Я работаю в Java с Elastic-search и хочу отфильтровать данные по параметру "содержит строку".

Например: получить список детей, имена которых начинаются с 'r'.

Но поисковый запрос (код ниже) возвращает список дочерних элементов с именами, равными (не содержащими) в 'r'.

Я пробовал "r *" - не повезло.

  builder.must(QueryBuilders.queryStringQuery("r*")
                .field("child_name")
                .lenient(true)
                .escape(true)
                .analyzeWildcard(false)
                .fuzziness(Fuzziness.ZERO)
                .defaultOperator(Operator.AND)
                .boost(2.0f));
    }

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Наконец-то я сам нашел проблему. У меня было две проблемы:

.analyzeWildcard(false)
.boost(2.0f))

Я изменяю на:

.analyzeWildcard(true)
.boost(1.0f))

И это помогло.

0 голосов
/ 08 мая 2018

Попробуйте другой тип QueryBuilder - WildcardQueryBuilder:

Реализует поисковый запрос с подстановочными знаками. Поддерживаются подстановочные знаки *, которые соответствует любой последовательности символов (включая пустую), а?, которая соответствует любому отдельному символу. Обратите внимание, что этот запрос может быть медленным, так как это необходимо перебирать много терминов. Чтобы предотвратить крайне медленно WildcardQueries, термин Wildcard не должен начинаться с одного из подстановочные знаки * или?.

Пример:

QueryBuilder qb = QueryBuilders.wildcardQuery("user", "k?mc*");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...