#solr #solrnet
#solr #solrnet
Вопрос:
Я использую SolrNet, чтобы попытаться выполнить точный поиск по запросу
У меня есть документ с URL-адресом, хранящимся в Solr как: file://C:/Users/me/docs/X Item3
Я хочу сопоставить все документы, содержащие «X элемент», поэтому буду искать «X элемент»
У меня есть
new SolrQueryByField("url", "*"X Item"*");
Но это не возвращает документ. Я также не хочу преобразовывать символы пробела в , но мне, возможно, придется, если Solr не сделает этого при анализе запроса.
Помощь приветствуется
Ответ №1:
Solr не поддерживает поиск по шаблону по умолчанию в начале термина. Вы можете обойти это, добавив a ReversedWildcardFilter
в определение индексации полей.
В зависимости от типа выполняемых поисковых запросов вы также можете разделить / индексировать каждую часть пути отдельно или просто имя файла.
Вам не нужно преобразовывать пробелы в , поскольку это должно выполняться клиентской библиотекой (я не знаком с тем, как SolrNet это делает, но это действительно должно абстрагироваться от вас) при выполнении HTTP-запроса.
Комментарии:
1. где документированы запросы с подстановочными знаками, начинающиеся с подстановочного символа, которые не работают по умолчанию?
2. Последнее замечание: синтаксис анализатора запросов. Это также естественное ограничение работы большинства индексов.
3. дело в том, что localhost:8983/ solr/collection1/select?q= * возвращает то же количество документов, что и localhost:8983/ solr/collection1/select?q = *: * для меня, и, глядя на код
WildcardQuery
в lucene, я не вижу, чтобы это примечание применялось4. @omu_negru Я хотел бы отметить, что одиночный * не совпадает с *<strings> и может быть ярлыком, но да, текущая документация разорвана: в ней говорится, что она не поддерживается, а вместо этого говорится «не должно начинаться с ..». Кажется, теперь это должно сработать. (кстати: решение использовать расширение с подстановочными знаками — это синтаксический анализатор, который теперь проверяет, доступна ли обратная версия afaict)
5. * — это подстановочный запрос, который будет соответствовать чему угодно, поэтому, если вы действительно хотите оптимизировать его в своем анализаторе запросов, вы можете просто вернуть запрос : сопоставить все документы, но не все анализаторы запросов будут это делать