Запрос Solr без указания имен полей
Я новичок в использовании Solr и я чего-то не хватает.
Я еще не касался многого в схеме примера, и я импортировал некоторые примеры данных. Я также настроил LocalSolr
, и это, кажется, работает хорошо.
мой вопрос просто с запросом Solr
в целом. У меня есть документ, где имя поле имеет значение Тома. я продолжаю смотреть на конфигурационные файлы, и я просто не могу понять, где я иду не так. Куча полей индексируется и хранится, и я вижу значения в Администраторе, но я не могу заставить запрос работать должным образом. Я пробовал различные запросы (http://server.com/solr/select/?q=value), и вот результаты:
**Query:** ?q=tom
**Result:** No results
**Query:** q=*:*
**Result:** 10 docs returned
**Query:** ?q=*:tom
**Result:** No results
**Query:** ?q=name:tom
**Result:** 1 result (the doc with name : tom)
Я хочу получить первый случай (?q=tom)
работает. Любой вклад в то, что может пойти не так, и как я могу это исправить, будет оценен.
6 ответов
Set <defaultSearchField>
to name
в вашей схеме.в XML
на
<defaultSearchField>
используется Solr при анализе запросов для идентификации какое имя поля следует искать в запросы, в которых явное имя поля не использовался.
вы также можете проверить (e)dismax вместо.
Я только что столкнулся с подобной проблемой... А именно, я определил несколько полей (которые не существовали в схеме.xml), чтобы описать мои документы, и хотите искать/запрашивать по нескольким полям документа, а не только по одному из них (например, "имя" в вышеупомянутом примере).
чтобы достичь этого, я создал новое поле ("compoundfield"), где я затем поместил/copyField мои определенные поля (так же, как поле "текст" в схеме.XML-документ, который поставляется с Solr distribution). Это приводит к чему-то вроде этого:
определение coumpoundfield:
<field name="compoundfield" type="text_general" indexed="true" stored="false" multiValued="true"/>
defaultSearchField:
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>compoundfield</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>
<!-- copyField commands copy one field to another at the time a document
is added to the index. It's used either to index the same field differently,
or to add multiple fields to the same field for easier/faster searching. -->
<!-- ADDED Fields -->
<copyField source="field1" dest="compoundfield"/>
<copyField source="field2" dest="compoundfield"/>
<copyField source="field3" dest="compoundfield"/>
это отлично работает для меня, но я не уверен, что это лучший способ сделать такой поиск "нескольких полей"...
Ура!
кажется DisMax parser правильно использовать для этой цели.
текущее решение устарело в более новых версиях lucene/solr. Чтобы изменить поле поиска по умолчанию, используйте df
параметр или измените поле, которое находится в:
<initParams
path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">default_field</str>
</lst>
</initParams>
внутри solrconfig.xml
Примечание я использую неуправляемую схему и solr 7.0.0 на момент написания
пройдя через Solr учебник, безусловно, стоит вашего времени: http://lucene.apache.org/solr/tutorial.html
Я предполагаю, что поле " имя " не индексируется, поэтому вы не можете искать на нем. Вам нужно изменить схему, чтобы сделать ее индексированной.
также убедитесь, что ваш XML на основе схемы. Поэтому, если вы добавляете поле с именем "name" в xml, но схема не знает об этом, то Solr просто проигнорирует это поле (т. е. не будет " сохранено "или"индексировано").
удачи
ну, несмотря на то, что поле поиска по умолчанию довольно полезно, я не понимаю, почему вы просто не используете синтаксис запроса solr:
......./?q=name:tom
или
......./?q=:&fq=имя: том