Почему динамические поля не работают как обычные поля (особенно при запросах и отображении в Hue) в solr?

И в Hue, и в Solr динамические поля вызывают проблемы. В Hue данные, хранящиеся в виде динамического поля, отказываются появляться в поиске Solr по умолчанию, который отображает все доступные данные из импортированной коллекции. Он также не может найти эти данные, которые имеют тип text_general и проиндексированы и сохранены. В Solr кажется, что динамические поля не индексируются, хотя параметры схемы выглядят так:

   <dynamicField name="*_t"  type="text_general"    indexed="true"  stored="true"/>
   <dynamicField name="*_txt" type="text_general"   indexed="true"  stored="true" multiValued="true"/>

Эти настройки в точности совпадают с обычным полем "имя", которое можно искать по токену и которое отображается в поиске Solr в оттенке.

   <field name="name" type="text_general" indexed="true" stored="true"/>

Моя цель состояла в том, чтобы использовать имена тегов и атрибутов в качестве имен полей при индексации, при этом значения индексируются. И это работает в Solr, и я могу видеть результаты, когда я использую основной запрос "start: star"

"docs": [
      {
        "id": "5CCD1D4D-2D7D-4F6A-BD2B-FC9D8577493F",
        "name": "43-02 43 AVENUE",
        "borough_t": "QUEENS",
        "community_board_t": "02 QUEENS",
        "police_precinct_t": "Precinct 108",
        "city_council_district_t": "26",
        "created_date_t": "1305702000",
        "status_t": "Closed",
        "resolution_action_t": "Cleaning crew dispatched.  Property cleaned.",
        "closed_date_t": "1309244400",
        "x_coordinate_t": "1006146",
        "y_coordinate_t": "210783",
        "_version_": 1450333101007831000
      },

Все с _t в конце, как известно, является значением динамического поля и именем перед именем из тега. Единственное поле, которое частично доступно для поиска, это поле имени. Если я буду искать "43" в запросе, я получу этот и другие документы с 43 в "имени". Но если я ищу слово "Precinct" в поле Police_precinct_t, мой поиск ничего не даст. Все это находится в административном окне Solr, если http://HOST:8983/solr.

В Хюэ у меня есть еще более редкая информация. Перейдя на панель поиска Solr и выполнив пустой поиск по умолчанию, вы получите первую страницу всех данных в базе данных Solr.

1450333101007831000 5CCD1D4D-2D7D-4F6A-BD2B-FC9D8577493F 43-02 43 AVENUE

1450333092014194700 7606462C-8657-4113-9427-5CEF30FB5483 Engine 53/Ladder 43

1450333092021534700 EEB939BD-DE52-467E-8EA3-91C7AF8E162A Engine 43/Ladder 59

1450333095903363000 0BEDA34C-ECCE-4405-A0DD-6D9994C51CE3 102-18 43 AVENUE

1450333095906508800 F7B6F181-C289-4F42-9ADC-36971ABE813A 102-28 43 AVENUE

1450333095907557400 C0F5286F-3216-4A0A-A4D0-F6038020122C 102-28 43 AVENUE

1450333095908606000 1C94DAFF-AB59-452B-A569-6CE4472867C7 102-36 43 AVENUE

1450333096052260900 9C6AF32C-06FA-46B2-8266-2BC8CF23CE79 104-20 43 AVENUE

Первое значение - это версия, второе - это идентификатор, а следующее - это значение имени, которое я использовал, чтобы проверить, отображаются ли только определенные поля в Hue, и, похоже, это так. Данные динамического поля даже не отображаются в Hue, как на панели администрирования Solr, но я могу искать данные так же, как и в окне Solr Query. Если я наберу "borough_t:QUEENS", я получу все результаты, где это точное поле и значение совпадают, как в Hue, так и в Solr Query. Это не учитывает сопоставление токенов и не соответствует ожидаемому поведению объявленного динамического поля или его атрибутов, приведенных выше. Я использую пример schema.xml, который приведен с Solr в collection1. Я проверил, чтобы убедиться, что нет никаких других динамических полей с глобусом "*_t", чтобы конфликтовать и отменять или ошибочно поле, когда оно установлено.

Solr очень прост в использовании и, с некоторым чтением, чтобы понять, но я не могу найти ответ, почему Solr отказывается работать, как ожидалось. Я использую SolrJ для индексации своих файлов в Solr, а затем я использую и Solr Admin Panel, и Solr Search в Hue (2.5) для взаимодействия с проиндексированными данными.

Пример моих данных XML, взятых с сайта открытых данных NYC, не будет правильно отформатирован, но, если вы действительно заинтересованы, вы можете посмотреть данные о расположении пожарного депо и местоположении граффити и экспортировать XML. Это данные, которые я помещаю в Solr. Мои решения, которые я вижу, похоже, пишут жестко запрограммированный код интерпретации, который присваивает каждому значению тега точное поле с настройками text_general или создает поля на лету, которые не сильно отличаются от динамических полей. Я хотел бы выяснить, как заставить динамические поля работать так, как я ожидаю.

Заранее спасибо.

1 ответ

Решение

Ваша проблема в том, что поле "имя" копируется в поле "текст" (а *_t нет). "текст" объявляется как поле по умолчанию для поиска, если вы не указали имя ключа. поэтому, если вы сделаете что-то подобное q= что искать, он будет искать в поле "текст" (которое включает "имя").

В файле schema.xml по умолчанию вы найдете эти инструкции (Solr 4.4 и 4.5).

сохраненный ="ложь" - причина, почему вы не видите значение этого поля в ответах solr.

<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

И вот имя копируется в текст

<copyField source="name" dest="text"/>

Как вы можете видеть в этих строках, прокомментированных в schema.xml, объявление "text" в качестве поля defaultSearch находится в solrconfig.xml.

< ! --Note: Un-commenting defaultSearchField will be insufficient 
if your request handler in solrconfig.xml defines "df", which takes precedence. 
That would need to be removed.
 <defaultSearchField>text</defaultSearchField> -->

Итак... тогда перейдем к solrconfig.xml..

<requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
        will be overridden by parameters in the request
     -->
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <int name="rows">10</int>
   <!--******TAKE A LOOK HERE *******-->
   <str name="df">text</str>
   <!--*****************************-->

 </lst>
... more stuff
</requestHandler>

Как решить вашу проблему?

раскомментируйте эту строку в schema.xml.., чтобы скопировать все "*_t" в "текст".

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

OBS: Вам нужно будет переиндексировать после этого изменения.

Другие вопросы по тегам