簡體   English   中英

Sunspot如何修改Solr的schema.xml? 是否會修改它?

[英]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 Schema 101

出於本討論的目的,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_ngramtext_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM