2012-08-31 24 views
0

我是Solr的新手,併爲我的下一個項目設計solr shema。在solr搜索中,多值字段在單個CSV字段中的優勢如何?

我的問題是什麼是多值字段的優點(效率/執行時間等),當以CSV格式保存多值字段的單個字段時。

例如:讓我們考慮一個名爲汽車的領域。那麼,如果我設計一個solr搜索引擎,哪一個更好。請忽略schema/doc語法。

<Car>A</Car> 
<Car>B</Car> 
<Car>C</Car> 

OR

<Car> A,B,C</Car> 

回答

0

我認爲主要的優點是索引的設計。如果您將這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個不同的值。

1

如果該字段有多個值,則應該使用多值字段。

多值事物可以防止錯誤匹配。
例如如果您有多個作者的文檔。 A B & C D
如果您將它作爲單個字段進行索引,可能會發生當您搜索詞組匹配「B C」(或以較小的斜率)時,它將匹配此文檔,因爲這些詞將顯示在行中。

多值字段將阻止這種匹配具有適當的位置增量值。

此外,多值字段將允許您正確地篩選結果。
q=authores:"B C"或者好得多或者使用標籤來篩選出像q=query&fq=authors:"B C"這樣的結果,它將利用篩選器緩存並添加到查詢性能中。

0

通過使用多值字段,您將擁有更大的靈活性。如果您使用多值字段,則可以按照以下方式使用特定值搜索和過濾結果。

q=car:A or fq=car:A 

由於表現索引/搜索多值字段和單值字段時不應該有任何區別。

this mail post他們說多值場影響面的表現。

MultiValued字段始終使用TermEnum算法而不是Field高速緩存算法 。

TermEnum是良好的不同索引術語的 有限數量的字段,並允許每文檔字段多個術語,而 FieldCache有利於相對於 大量索引值的的文件的數量,並只允許每個字段每個字段使用單個字段(每個字段 文檔)。

+0

我認爲他的示例字段在1個文檔中,所以通常他的選擇不會影響查詢結果。取決於該字段的配置。 –

0

基本上,使用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