Как обработать токен AT & T в индексе solr - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть индекс, содержащий AT & T в качестве поля, но когда я ищу это поле, мы не можем вставить и подписать запрос, поэтому он кодируется в AT% 26T. Поиск AT% 26T ничего не возвращает, Есть ли способ использовать анализатор или фильтры для индексации этого типа терминов.

ПРИМЕЧАНИЕ: Я использовал анализатор WordDelimiter с ReserveOriginal = 1 ... но это не сработало

Ответы [ 4 ]

3 голосов
/ 03 сентября 2011

Вы можете попробовать поискать AT&T

Иначе вы можете узнать в админ / анализ, что происходит с термином AT & T на стадии запроса и индексации. С подробным описанием вы можете точно увидеть, что анализаторы делают с вашими терминами.

1 голос
/ 03 сентября 2011

Другая причина, отличная от показанной другими, - экранирование специальных символов.Вы должны убрать все из списка:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

Просто попробуйте использовать обратную косую черту перед амперсандом.

1 голос
/ 03 сентября 2011

Вам нужно немного настроить WordDelemiter.Посмотрите мои настройки, которые я сделал для jetwick для поиска хэштегов ala # java

https://github.com/karussell/Jetwick/blob/master/src/main/java/de/jetwick/es/JetwickFilterFactory.java#L49

Фон: AT & T обычно маркируется как AT и T, потому что '&' удаляется как его нетцифра или символ, но с указанным выше классом вы можете сделать так, чтобы знак '&' обрабатывался как цифра, а все вещи, содержащие знаки '&', затем маркировались бы как 'AT & T' (а также 'AT' и 'T', я думаю), нотолько если preserveOriginal = 1 или вы обрабатываете их как char, но тогда он не будет разделен на 'AT' и 'T', я думаю, так как все позиции строки определяются как символы

Кстати: вы будетенеобходимо переиндексировать и применить тот же анализатор / токенизатор к строке запроса!

0 голосов
/ 03 сентября 2011

Может быть, вы можете попробовать использовать catenateWords = "1".Так что AT & T будет также внесен в список ATT.Также убедитесь, что ваш анализатор отображается как:

<analyzer type="query"> //this will define how the query is parsed and split into tokens before searching it

и

<analyzer type="index">// this will define how the field is indexed

Если у вас есть только этот тег , то анализатор будет использоваться как во время запроса, так и во время индекса.

...