我是Solr的新手,併爲我的下一個項目設計solr shema。在solr搜索中,多值字段在單個CSV字段中的優勢如何?
我的問題是什麼是多值字段的優點(效率/執行時間等),當以CSV格式保存多值字段的單個字段時。
例如:讓我們考慮一個名爲汽車的領域。那麼,如果我設計一個solr搜索引擎,哪一個更好。請忽略schema/doc語法。
<Car>A</Car>
<Car>B</Car>
<Car>C</Car>
OR
<Car> A,B,C</Car>
我是Solr的新手,併爲我的下一個項目設計solr shema。在solr搜索中,多值字段在單個CSV字段中的優勢如何?
我的問題是什麼是多值字段的優點(效率/執行時間等),當以CSV格式保存多值字段的單個字段時。
例如:讓我們考慮一個名爲汽車的領域。那麼,如果我設計一個solr搜索引擎,哪一個更好。請忽略schema/doc語法。
<Car>A</Car>
<Car>B</Car>
<Car>C</Car>
OR
<Car> A,B,C</Car>
我認爲主要的優點是索引的設計。如果您將這3個值放入單個字段中,則此字段表示搜索1值後。如果您使用多值字段,則會爲每個值創建並顯示新字段。這有什麼意義:
想象一下,你想擴大你的指數。新領域的一個值就應該像這樣
<LengthOfCar>5,0</LengthOfCar>
如果你現在要與給定結果工作,你地圖無法能說出什麼樣的價值是多值和isn't,因爲你單獨它全部通過「,」。也許對你來說,這將是明確的,但所有其他用戶不會有所作爲。其結果將是單場:
<doc>
<str name="Car">A,B,C</str>
</doc>
您的多值字段的結果將是:
<doc>
<arr name="Car">
<str>A</str>
<str>B</str>
<str>C</str>
</arr>
</doc>
正如你所看到的,對於多值字段的結果是有意義得多。和它的方式更容易處理它(也許你想使用xslt或其他)。
根據您的效率問題:我不認爲性能和執行時間會有任何差異。 Solr極其快速,如果有任何區別,你甚至不會注意到差異。
所以我建議你使用多值字段,因爲1字段有3個不同的值。
如果該字段有多個值,則應該使用多值字段。
多值事物可以防止錯誤匹配。
例如如果您有多個作者的文檔。 A B & C D
如果您將它作爲單個字段進行索引,可能會發生當您搜索詞組匹配「B C」(或以較小的斜率)時,它將匹配此文檔,因爲這些詞將顯示在行中。
多值字段將阻止這種匹配具有適當的位置增量值。
此外,多值字段將允許您正確地篩選結果。
q=authores:"B C"
或者好得多或者使用標籤來篩選出像q=query&fq=authors:"B C"
這樣的結果,它將利用篩選器緩存並添加到查詢性能中。
通過使用多值字段,您將擁有更大的靈活性。如果您使用多值字段,則可以按照以下方式使用特定值搜索和過濾結果。
q=car:A or fq=car:A
由於表現索引/搜索多值字段和單值字段時不應該有任何區別。
在this mail post他們說多值場影響面的表現。
MultiValued字段始終使用TermEnum算法而不是Field高速緩存算法 。
TermEnum是良好的不同索引術語的 有限數量的字段,並允許每文檔字段多個術語,而 FieldCache有利於相對於 大量索引值的的文件的數量,並只允許每個字段每個字段使用單個字段(每個字段 文檔)。
基本上,使用CSV內容字段,您必須自行標記所有字段以獲得良好的搜索結果。使用多值字段,您將通過Solr完成此任務。看看例子
CSV場
<str name="Pet">Dog,Cat</name>
如果包含類型「狗」的寵物的所有文檔想要的搜索,你將不得不配置您的CSV字段類型以這樣的方式它會爲您標記文本。所以,你可以分別搜索'狗'或'貓'。
現在有一個多值提交
<arr name="Pet">
<str>Dog</str>
<str>Cat</str>
</arr>
你不需要任何額外的代碼搜索「狗」。
另一點是您不能使用CSV字段進行分面。看看http://wiki.apache.org/solr/SimpleFacetParameters
我認爲他的示例字段在1個文檔中,所以通常他的選擇不會影響查詢結果。取決於該字段的配置。 –