#lucene #solr #sunspot #sunspot-rails
#lucene #solr #солнечное пятно #sunspot-рельсы
Вопрос:
Solr (через Lucene) поддерживает различные способы указания способа индексирования поля в документе: индексирование, маркирование, хранение,…
Я ищу способ иметь поля, которые хранятся в Solr, но не индексируются. Есть ли способ добиться этого в Sunspot?
Ответ №1:
Конфигурационный DSL Sunspot поддерживает опцию :stored => true
для многих типов по умолчанию. Для примера сохраненной строки это было бы намного проще, чем мой первый пример:
searchable do
string :name, :stored => true
end
При этом генерируется имя поля, name_ss
соответствующее следующему dynamicField
, которое уже присутствует в стандартной схеме Sunspot:
<dynamicField name="*_ss" stored="true" type="string" multiValued="false" indexed="true"/>
Вы также можете создать свое собственное field
или dynamicField
в своем schema.xml должно быть сохранено, но не проиндексировано, а затем используйте опцию Sunspot 1.2 :as
, чтобы указать соответствующее имя поля.
Например, более подробная версия приведенного выше. В вашей схеме:
<dynamicField name="*_stored_string" type="string" indexed="false" stored="true" />
И в вашей модели:
searchable do
string :name, :as => 'name_stored_string'
end
Ответ №2:
Вы можете попробовать :
http://localhost:8983/solr/admin/luke?numTerms=0
И считывайте с помощью xpath или regex эти поля со значением атрибута схемы:
<str name="I">Indexed</str>
<str name="T">Tokenized</str>
<str name="S">Stored</str>
Вы получите что-то вроде:
<lst name="field">
<str name="type">stringGeneralType</str>
<str name="schema">--SM---------</str>
</lst>
Комментарии:
1. Это подскажет мне, сохранено ли поле / проиндексировано или нет. Но это не способ сообщить Solr об атрибутах хранилища полей. Или я что-то здесь упускаю?