Неиндексированное поле Solr Sunspot

#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 об атрибутах хранилища полей. Или я что-то здесь упускаю?