2010-05-24 2 views
6

Я реализую полнотекстовый поиск на my rap website, и у меня возникают проблемы с именами рэпперов и песен.Полнотекстовый поиск нерегулярных имен рэппера с Solr

Например, кто-то может захотеть найти рэпера "Cam'ron", используя запрос "camron" (не учитывая апостроф среднего слова). Аналогичным образом, кто-то может найти песню «3 Peat», используя запрос «3peat».

«The Notorious B.I.G.» - это немного странный случай: «The Notorious BIG» и «The Notorious B.I.G.», оба работают (думаю, потому что solr.StandardFilterFactory удаляет точки из аббревиатур?), но «The Notorious B.I.G» (т. е. минус конечная точка) нет.

В идеале все разумные варианты этих имен должны работать. Я предполагаю, что ответ имеет какое-то отношение к solr.WordDelimiterFilterFactory, но я не уверен.

Кроме того, я использую Sunspot с Rails, если это необходимо.

ответ

10

Да, вы правы. Вам необходимо правильно настроить WordDelimiterFilterFactory. Попробуйте включить все свойства и не забудьте включить свойство preserveOriginal, которое также сохранит ваши первоначальные условия.

generateWordparts - будет из B.I.G. термины - B I G

generateNumberParts - составит от 3Peat терминов - 3 Торф

catenateWords - составит от B.I.G. термины - BIG

catenateNumbers - сделают из Rapper 802,11 термины - Rapper 80211

catenateAll - составит от Рэпер-802,11 термин - Rapper80211

splitOnCaseCh Анж - составит от гангста терминов - Gan Gs Ta

preserveOriginal - сохранит также первоначальный срок. От Rapper-802.11RuuLlZ сделает - Rapper-802.11RuuLlZ.

+2

Большой совет, спасибо. Я добавил следующее в 'schema.xml':' '. Кажется, это решает все, кроме случая «B.I.G». Есть идеи? –

+0

Это может быть из-за StandardTokenizer. Вместо этого я заменил бы его на WhitespaceTokenizer.Чтобы проанализировать, как работают ваши анализаторы, вы можете использовать «Анализ» в своем solr, если у вас есть веб-интерфейс для этого. Там вы можете видеть, какой анализатор преобразует ваш текст и что является результатом его работы. – Yurish