Соль близость упорядочена против неупорядоченных - PullRequest
4 голосов
/ 02 ноября 2010

В Solr вы можете выполнять упорядоченный поиск близости, используя синтаксис

"word1 word2"~10

Под заказом я подразумеваю, что слово1 всегда будет стоять перед словом2 в документе.Я хотел бы знать, есть ли простой способ выполнить неупорядоченный поиск близости, т.е.word1 и word2 встречаются в пределах 10 слов друг от друга, и не имеет значения, что будет первым.

Один из способов сделать это будет следующим:

"word1 word2"~10 OR "word2 word1"~10

Выше будет работать, но я 'ищу что-нибудь попроще, если возможно.

Ответы [ 3 ]

7 голосов
/ 03 ноября 2010

Slop означает, сколько может произойти транспонирование слов.Таким образом, «ab» будет отличаться от «ba», поскольку допускается различное количество транспозиций.

  • a foo b имеет позиции (a, 1), (foo, 2), (b3).Для соответствия (a, 1), (b, 2) потребуется одно изменение: (b, 2) => (b, 3)
  • Однако для соответствия (b, 1), (a, 2) вам понадобится (a, 2) => (a, 1) и (b, 1) => (b, 3), в общей сложности для трех перемещений позиции

В общем, если"a b"~n соответствует чему-либо, тогда "b a"~(n+2) также будет соответствовать.

РЕДАКТИРОВАТЬ: Я думаю, я никогда не давал ответа.Я вижу два варианта:

  1. Если вы хотите откат n, увеличьте его до n + 2
  2. Вручную дизъюнктивизируйте свой поиск, как вы предложили

Я думаю, что №2, вероятно, лучше, если только ваш спад не очень большой.

2 голосов
/ 02 ноября 2010

Вы уверены, что это уже не работает? В документации ничего не сказано о том, что она «заказана»:

Поиск по близости можно выполнить с помощью неаккуратного запроса фразы. Чем ближе эти два термина появляются в документе, тем выше будет оценка. Запрос неаккуратной фразы задает максимальное значение «отстой» или количество токенов позиций, которые необходимо переместить, чтобы получить совпадение.

В этом примере для стандартного обработчика запросов будут найдены все документы, в которых «Бэтмен» встречается в пределах 100 слов «фильма»:

http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_search_for_one_term_near_another_term_.28say.2C_.22batman.22_and_.22movie.22.29

1 голос
/ 11 ноября 2013

Начиная с Solr 4, это возможно с SurroundQueryParser .

например. выполнить упорядоченный поиск (запрос, в котором «вторая фраза» следует после «первой фразы» не позднее, чем через 3 слова):

3W(phrase W one, phrase W two)

Для выполнения неупорядоченного поиска (запрос «фраза два» в окрестности 5 слов «фразы один»):

5N(phrase W one, phrase W two)
...