Запрос 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 правильно использовать для этой цели.

связанный поток stackoverflow здесь.


текущее решение устарело в более новых версиях 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=имя: том