Solr не ищет (динамически создаваемые) поля - PullRequest
1 голос
/ 07 июня 2010

Я импортировал документы в Solr, в которых поля динамически создаются из шаблона (в основном * _s). В серверной части (/ solr / admin) я вижу, что они существуют: статистические показатели, такие как частота терминов, отображаются правильно. Все они перечислены как проиндексированные и сохраненные.

Однако они не отображаются в запросах, даже когда я ищу по всем полям, например:

/solr/select/?indent=on&q=myterms&fl=*

Эта проблема похожа на SOLR, не выполняющий поиск по определенным полям , и я попробовал решение, которое было:

Если вы хотите, чтобы ваш стандартный обработчик запросов выполнял поиск по всем вашим полям, вы можете изменить его в своем файле solrconfig.xml (я всегда добавляю второй обработчик запросов вместо изменения "стандартного". Поле fl - это список полей, которые вы хотите искать против. Это разделенный запятыми список или *.

Я внес это изменение в стандартный файл solrconfig.xml, но все равно не получил результатов.

Я попытался создать очень простой документ:

{'id':5, 'name':'foo'}

И этот запрос возвращает этот документ:

/solr/select/?indent=on&q=foo&fl=*

Полные результаты запроса без результатов:

<response>
−
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
−
<lst name="params">
<str name="echoParams">all</str>
<str name="h1">true</str>
<str name="defType">dismax</str>
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">Foo</str>
<str name="version">2.2</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>

Ответы [ 3 ]

2 голосов
/ 09 января 2014

Поскольку вы используете _s, вы можете скопировать эти поля в «текст» в solr/collection1/conf/schema.xml следующим образом:

<copyField source="*_s" dest="text" maxChars="3000"/>

Это небольшое изменение в решении Почему динамические поляне действует как обычные поля (особенно при запросах и отображении в Hue) в solr? , что должно раскомментировать эту строку *_t:

<!-- Above, multiple source fields are copied to the [text] field. 
       Another way to map multiple source fields to the same 
       destination field is to use the dynamic field syntax. 
       copyField also supports a maxChars to copy setting.  -->

<!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->

Это сделало мои динамические поля доступными для поиска с помощью:

curl http://localhost:8983/solr/collection1/select?q=foo

Здесь описывается поле "catchall" text:

<!-- catchall field, containing all other searchable text fields (implemented
     via copyField further on in this schema  -->
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

См. Также http://wiki.apache.org/solr/SchemaXml#Copy_Fields

2 голосов
/ 07 июня 2010

Является ли deftype вашего "стандартного" обработчика запросов dismax? Если нет, то это не сработает. Как говорится в ответе на заданный вами вопрос, вы должны использовать dismax для поиска по нескольким полям. Если вы не хотите использовать dismax и все же хотите выполнять поиск во многих полях одновременно, вам нужно использовать функцию копирования полей во время индексации, чтобы собрать все поля, по которым вы хотите искать, в одно поле, а затем сделать это поле поле по умолчанию.

0 голосов
/ 26 июня 2010

Я вижу, что вы используете запрос "Foo", в то время как значение name равно "foo". Возможно, вы захотите проверить, используете ли вы строчные термины в индексе и запросить в своей схеме тип поля, который вы используете для name.

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