Точный запрос Solr

#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. * — это подстановочный запрос, который будет соответствовать чему угодно, поэтому, если вы действительно хотите оптимизировать его в своем анализаторе запросов, вы можете просто вернуть запрос : сопоставить все документы, но не все анализаторы запросов будут это делать