Запрос Solr без указания имен полей - PullRequest
13 голосов
/ 27 января 2010

Я новичок в использовании Solr, и я должен что-то упустить.

В примере схемы я пока особо не трогал и импортировал некоторые примеры данных. Я также настроил LocalSolr, и это, кажется, работает хорошо.

Моя проблема только с запросом Solr в целом. У меня есть документ, в котором для поля name установлено значение tom. Я продолжаю смотреть на файлы конфигурации и просто не могу понять, куда я иду не так. Куча полей проиндексирована и сохранена, и я могу видеть значения в админке, но я не могу получить запросы для правильной работы. Я пробовал различные запросы (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 ]

14 голосов
/ 27 января 2010

Установите <defaultSearchField> на name в вашем schema.xml

<defaultSearchField> Используется Solr при разборе запросов для идентификации какое имя поля следует искать в запросы, где явное имя поля не был использован.

Возможно, вы также захотите проверить (e) dismax .

6 голосов
/ 10 ноября 2011

Я только что столкнулся с похожей проблемой ... А именно, я определил несколько полей (которых не было в schema.xml) для описания моих документов и хочу выполнить поиск / запрос по нескольким полям документа, не только один из них (например, «имя» в приведенном выше примере).

Для этого я создал новое поле («составное поле»), в которое затем поместил / copyField мои определенные поля (точно так же, как поле «текст» в документе schema.xml, который поставляется с дистрибутивом Solr) , В результате получается что-то вроде этого:

определение кумфунда:

<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"/>

Это прекрасно работает для меня, но я не уверен, что это лучший способ сделать такой поиск по нескольким полям ...

Ура!

1 голос
/ 05 октября 2017

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

1 голос
/ 23 октября 2012

Кажется, что DisMax парсер это правильная вещь для этой цели.

Связанная нить stackoverflow здесь.

0 голосов
/ 27 января 2010

Что ж, несмотря на то, что поле поиска по умолчанию довольно полезно, я не понимаю, почему вы просто не используете синтаксис запроса solr:

......./?q=name:tom

или

....... / д = & FQ = имя: Том

0 голосов
/ 27 января 2010

Изучение руководства по solr определенно стоит вашего времени: http://lucene.apache.org/solr/tutorial.html

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

Также убедитесь, что ваш XML действительно соответствует схеме. Поэтому, если вы добавляете поле с именем «name» в xml, но схема не знает об этом, то Solr просто игнорирует это поле (то есть оно не будет «сохранено» или «проиндексировано»). *

Удачи

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