[英]Rails 4 solr sunspot in production environment schema.xml isn't being read
[英]How does Sunspot modify Solr's schema.xml? Does it modify it at all?
如果我錯了,請告訴我,但我認為solr只需要schema.xml中已經提到過的字段。 所以,如果我有一個名為'title'的字段,我需要在模式中提到它。
在Sunspot的文檔中沒有提到修改schema.xml。 我只是想知道Sunspot如何修改schema.xml,允許自定義字段輸入索引。
我也知道Sunspot使用RSolr來做事情。 因此,如果有辦法修改架構並使用RSolr將數據從DB重新加載到Solr,請告訴我。
正如karmajunkie所暗示的那樣,Sunspot使用自己的標准模式。 我將在這里詳細介紹它的工作原理。
出於本討論的目的,Solr模式主要由兩部分組成:類型定義和字段定義。
type
定義通過指定類型名稱,類型的Java類以及某些類型(特別是文本)的情況來設置類型,這是XML的從屬塊,用於配置如何處理該類型。
field
定義允許您定義字段的名稱以及該字段中包含的值類型的名稱。 這允許Solr將文檔中字段的名稱與其類型以及少數其他選項相關聯,從而如何在索引中處理該字段的值。
Solr還支持dynamicField
定義,而不是靜態字段名稱,允許您指定其中包含glob的模式。 傳入字段的名稱可以與這些模式匹配,以確定其類型。
Sunspot的模式有一些內部使用字段的field
定義,例如ID和模型名稱。 此外,Sunspot自由使用dynamicField
定義來根據類型建立命名約定。
這種字段命名約定的使用允許Sunspot定義一個配置DSL,用於創建從模型到准備由Solr索引的XML文檔的映射。
例如,模型中的這個簡單配置塊......
searchable do
text :body
end
...將由Sunspot用於創建body_text
的字段名稱。 此字段名稱與架構中以下dynamicField
定義的*_text
模式匹配:
<dynamicField name="*_text" type="text" indexed="true" stored="false" multiValued="true"/>
這會將帶有后綴_text
任何字段映射到Sunspot對text
類型的定義。 如果您查看Sunspot的schema.xml,您將看到許多其他類型和選項的類似約定。 例如, :stored => true
選項通常會在該類型的后綴上添加一個s
(例如, _texts
)。
根據我對客戶和我自己的項目的經驗,有兩個很好的案例來修改Sunspot的架構。 首先,根據應用程序可能需要的不同功能更改text
字段的分析器。 其次,為了更精細的Solr分析儀應用,創建全新的類型(通常基於文本類型)。
例如,擴展搜索匹配與“模糊”搜索可以通過匹配特殊的基於文本的字段來完成,該字段也使用語言詞干或NGrams。 原始text
字段中的標記可用於填充拼寫檢查,或用於提升完全匹配。 當更嚴格的匹配失敗時,自定義text_ngram
或text_en
的標記可用於擴大搜索結果。
Sunspot的DSL提供了一個最終功能,用於將字段映射到這些自定義字段。 一旦設置了type
及其相應的dynamicField
定義,就可以使用Sunspot的:as
選項來覆蓋基於約定的名稱生成。
例如,為上面添加一個自定義ngram
類型,我們可能會使用以下Ruby代碼再次使用NGrams處理正文:
searchable do
text :body
text :body_ngram, :as => 'body_ngram'
end
太陽黑子有一個庫存模式,有點調整太陽黑子集成,堅持開發人員最不驚訝的原則 - 例如,股票solrconfig.xml設置為關閉自動提交,即使在生產中你想要打開它。 模式實際上與類型而不是字段有關 - 請參閱下面的鏈接以獲取有關如何創建新字段類型的示例。 如果字段符合現有類型之一,則對字段建立索引是微不足道的。 例如:
class Blog
searchable do
text :title
end
end
在搜索過程中,你會做這樣的事情:
class BlogSearch
def self.search(options={})
Sunspot.search(Blog) do
with(:title, options[:title]) if options[:title].present?
end
end
end
太陽黑子的維基有很多額外的文檔。 這是一個添加自定義類型以允許ngram搜索的示例:
https://github.com/outoftime/sunspot/wiki/Wildcard-searching-with-ngrams
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.