簡體   English   中英

如何過濾Solr中多值字段上返回的值

[英]How to filter values returned on a multivalued field in Solr

我有一個名為uuids的文檔。 此字段是一個列表(多值),每個文檔最多可以有100k值。

我想搜索匹配以“5ff6115e”開頭的uuids的文檔。 我已經可以通過使用q=uuids:5ff6115e*成功地完成它:

http:// localhost:8983 / solr / test1 / select?q = uuids%3A5ff6115e *&rows = 1&fl = uuids&wt = json&indent = true

但是,結果文檔為我提供了該字段的所有100k值。

我想要的不僅是過濾uuids字段以此值開頭的文檔,還要過濾返回的字段值,這樣我才會在答案中收到特定的值。

怎么做?

使用突出顯示。 @Jokin首先提到它,我覺得這是最好的答案,不會攻擊Solr。 嘗試使用PostingsHighlighter或FastVectorHighlighter,而不是默認/標准熒光筆。 不幸的是,它們都在內部對該字段中的所有UIDS執行通配符查詢。 FVH有機會在內部更聰明地做到這一點,但它並沒有這樣實現。

注意:如果寫入一個小的Java添加到Solr的范圍內,理想的答案是添加術語向量(只是術語向量中的術語數據,沒有偏移/位置),然后寫一個“DocTransformer”來抓取術語矢量術語; 尋找前綴,然后迭代那些有前綴的人。 相當快速的darned。

這目前不可能; 看到這個bug前一個問題

我不知道你的索引有多大,但是擁有一個包含10萬個多值字段的文檔對我來說似乎不是正確的方法。 在這種情況下,不要在solr中要求使用某個功能,最好重構索引並以其他方式存儲信息,也許創建另一個核心,其中包含文檔的唯一文檔和帶有guid的字段。 您可以使用then field collapsing或其他solr功能來獲取所需的信息。

因此,例如,solr中的一個簡單案例是索引書籍,而不是將每本書作為一個整體索引,最好將每個單獨的頁面索引為文檔。 如果你能告訴我們更多關於你的案例,我們可以考慮如何改進索引。

無論如何,對於沒有這么多值的情況,您可以使用突出顯示組件獲得相同的結果。 為獲得最佳性能,您可以在返回字段列表中排除該字段,並使用突出顯示器返回匹配的字詞。 您可以調整熒光筆以獲得最大數量的片段以及每個片段的大小等等.http:// localhost:8893 / solr / test1 / select?q = uuids%3A5ff6115e *&rows = 1&fl = id&wt = json&indent = true&hl =上&hl.fragsize = 1&hl.fl = UUID的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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