У меня есть существующий запрос ElasticSearch, использующий Java API:
BoolQueryBuilder queryBuilder =
boolQuery().should(queryStringQuery(theUsersQueryString));
SearchResponse response = client.prepareSearch(...).setQuery(queryBuilder);
Теперь я хочу добавить к этому нечеткость, чтобы незначительные орфографические ошибки по-прежнему что-то возвращали пользователю. Я предполагаю, что добавление параметров нечеткости к объекту QueryBuilders
будет полезным:
boolQuery().should(queryStringQuery(theUsersQueryString)
.fuzziness(Fuzziness.ONE)
.fuzzyMaxExpansions(4)
.fuzzyPrefixLength(2));
К сожалению, это не работает, и я до сих пор не смог найти хорошую документацию для этого. Например, у меня есть строка John Deere
в моей базе данных. Если я использую строку запроса deere
, я получаю совпадение, но не при использовании строк запроса Deeree
или Deeer
.
Мой вопрос: как мне правильно фаззифицировать мой запрос?
theUsersQueryString
, и ожидаемые результаты? - person Val   schedule 09.03.2016Deeree
иDeeer
, которые требуют 2 изменений, поскольку я вижу, что вы используете фильтр нижнего регистра (т. е. вам нужно сначала выполнитьdeeree
, а затем отрезать последниеe
вdeere
). Попробуйте установитьfuzziness(Fuzziness.TWO)
- person Mateusz Dymczyk   schedule 09.03.2016fuzzy_prefix_length
, в этом случае уровень нечеткости 1 должен работать, НО вам все равно нужно сделать запрос в нижнем регистре, т.е.deeree
, поскольку первые 2 буквы во многом совпадают. - person Mateusz Dymczyk   schedule 09.03.2016