Solr возвращает 0 строк при точном совпадении "#" (хэш-символ) - PullRequest
0 голосов
/ 27 октября 2011

При выполнении поиска, например:

field_name:#
field_name:"#"
field_name:"\#"

там, где есть запись со значением ровно "#", Solr возвращает 0 строк.

Обходной путь, который мы должны использовать, состоит в том, чтобы использовать запрос диапазона на поле, такое как:

field_name:[# TO #]

и это возвращает правильные документы.

Подробности использования: У нас есть поле, которое индексирует текстовое поле и вычисляет букву группа ". Это сохраняет только первый значащий символ из значения (число или буква), и если это число, то просто хранит "#", как мы хотите, чтобы все пронумерованные элементы были сгруппированы вместе.

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

Определение поля:

<fieldType name="letterGrouping" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="^([a-zA-Z0-9]).*" group="1"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.TrimFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z0-9])" replacement="" replace="all"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="([0-9])" replacement="#" replace="all" />
</analyzer>
</fieldType>

Информация о сервере:

 Solr Specification Version: 3.2.0
 Solr Implementation Version: 3.2.0 1129474 - rmuir - 2011-05-30 23:07:15
 Lucene Specification Version: 3.2.0
 Lucene Implementation Version: 3.2.0 1129474 - 2011-05-30 23:08:57

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

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

Однако field_name: 123 вернет обратно результаты, так как 123 следует преобразовать в # и соответствовать индексированному значению.

Или просто примените fieldType во время индексации.

0 голосов
/ 27 октября 2011

Из списка рассылки группы пользователей solr

27 октября 2011 г. 13:09 Эрик Эриксон написал:

Взгляните на страницу администрирования / анализа и поставьте свои токеныв течение индекса и времени запроса.Я думаю, вы увидите, что # извлекается во время запроса из-за первого PatternReplaceFilterFactory.

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

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

([^a-z0-9])

Он удалял хеш-символ из запроса, поэтому полностью удалял запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...