Поиск в спящем режиме: поиск по нескольким одинаковым словам - PullRequest
0 голосов
/ 08 ноября 2018

Я использую Hibernate Search 5.10.3 и не могу найти результаты, которые содержат только N одинаковых слов. Например, имея следующие образцы в моем индексе:

1. foo foo
2. foo bar

Я хочу получить только строку 1, соответствующую "foo foo", поэтому я делаю следующий запрос:

queryBuilder.simpleQueryString().onField("myField").matching("foo + foo").createQuery();

Но этот запрос возвращает и "foo foo", и "foo bar". Как это сделать с помощью поиска в спящем режиме?

В общем, мне нужно искать все набранные слова в любом порядке с учетом их количества. 1) Все слова в поисковом запросе должны быть в поле в любом порядке 2) с одинаковым количеством. Я могу достичь 1), но понятия не имею, как я могу достичь 2). Пример:

1. foo bar smth
2. foo bar smth bar 

Если я ищу "bar smth foo", мне нужно только 1., если "bar foo bar smth" - только 2.

1 Ответ

0 голосов
/ 08 ноября 2018

Это не та вещь, которую легко сделать с Lucene. Возможно, вы захотите пересмотреть свой вариант использования, посмотрите, действительно ли полнотекстовый поиск - это путь.

У меня нет точного решения, чтобы дать вам, но фразеологические запросы выглядят довольно похоже на то, чего вы пытаетесь достичь.

Вы можете попробовать что-то вроде этого:

queryBuilder.simpleQueryString().onField("myField").matching("foo smth \"bar bar\"").createQuery();

Выше будет соответствовать два "бара", которые строго следуют друг за другом. Если вы хотите быть немного более мягким, вы можете установить помойку:

queryBuilder.simpleQueryString().onField("myField").matching("foo smth \"bar bar\"~2").createQuery();

Это будет соответствовать двум "полосам", которые следуют друг за другом ИЛИ разделены одним или двумя словами. Фактический смысл немного сложнее, но вы поняли идею. Вы можете найти точное определение помола в Javadoc org.apache.lucene.search.PhraseQuery#getSlop.

Полагаю, использование очень высокого откоса позволит добиться более или менее того, что вы хотите, но это может плохо сказаться на производительности.

...