Сохраненные поля в Solr отображаются в запросах, почему?

Я новичок в использовании Solr, создал новое ядро ​​и скопировал schema.xml по умолчанию в папку conf/. Внесенные мной изменения очень тривиальны.

<field name="id" type="string" indexed="true" stored="false" required="true" multiValued="false" /> 

Как видите, я установил в поле id значение stored = false. Насколько я понимаю, поле id не должно отображаться сейчас, когда я выполняю поиск по запросу. Но этого не происходит. Я попытался перезапустить экземпляр solr и снова выполнил запрос на индексирование файла.

curl 'http://localhost:8983/solr/TwitterCore/update/json?commit=true' 
  --data-binary @$(echo TwitterData_Core_Conf/TwitterText_en_demo.json) 
  -H 'Content-type:application

Согласно Solr Wiki, это должно было переиндексировать мой файл. Однако, когда я снова запускаю свой запрос, я все еще вижу Id.

Пример возвращенного документа (это не полный узел JSON, я просто скопировал некоторые части):

"text": [
      "RT @FollowTrainTV: Moonseternity just joined #FollowTrainTV - Watch them stream on http://t.co/oMcOGA51kT"
    ],
    "lang": [
      "en"
    ],
    "id": "0a8edfea-68f7-4b05-b370-27b5aba640b7", // I dont want to see this
    "_version_": 1512067627994841000

Может быть, кто-нибудь может дать мне подробные инструкции по повторной индексации.


person CyprUS    schedule 12.09.2015    source источник
comment
Я думаю, вы очистили старые данные перед повторной индексацией?   -  person YoungHobbit    schedule 12.09.2015


Ответы (2)


Когда вы изменяете файл schema.xml и перезапускаете solr-сервер, изменения применяются только для новых документов. Это означает, что вам необходимо очистить индекс и повторно проиндексировать все документы (за исключением токенизатора запроса, эти изменения вступают в силу сразу после перезапуска сервера, но здесь это не так). После повторной индексации поле id больше не должно быть видно.

Еще одно замечание: вам не нужно проверять свои запросы с помощью curl. Когда вы подключаетесь к http://localhost:8983/solr с помощью своего веб-браузера, вы должны найти там интерфейс администратора. Здесь вы можете выбрать ядро ​​и протестировать свои запросы.

person phylib    schedule 12.09.2015
comment
Я пытался сделать это curl http://<URL>:<port>/solr/update?strea m.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E, но продолжаю получать ошибку 404. Точная ошибка Problem accessing /solr/update. Я не знаю, что случилось сейчас. - person CyprUS; 12.09.2015
comment
Проще всего удалить папку data/ из индекса на solr-server. После удаления этой папки и перезапуска сервера вы можете переиндексировать свои документы. Тогда вы больше не должны видеть идентификатор. - person phylib; 12.09.2015
comment
@CyprUS Вы можете использовать эту команду для очистки индексов solr: curl http://localhost:8983/solr/core_name/update?commit=true -H 'Content-Type:text/xml' --data-binary '<delete><query>*:*</query></delete>' - person YoungHobbit; 13.09.2015
comment
моя ошибка заключалась не в добавлении имени ядра. спасибо @abhishekbafna - person CyprUS; 14.09.2015

См. Этот https://lucene.apache.org/solr/guide/6_6/docvalues.html документ.

Не сохраненные поля docValues ​​также будут возвращены вместе с другими сохраненными полями, когда все поля указаны для возврата (например, «fl = *») для поисковых запросов, в зависимости от эффективного значения параметра useDocValuesAsStored для каждого поля. Для версий схемы> = 1.6 неявным значением по умолчанию является useDocValuesAsStored = "true".

Тип поля String имеет docValues ​​= "true". Это причина, по которой он появляется в поисковом ответе.

Вы можете добавить в поле параметр useDocValuesAsStored = "false" или использовать другой fieldType, например text_general.

person Sony Thomas    schedule 09.12.2019