2011-06-16 83 views
1

我有一個solr搜索引擎設置了多個字段,我希望能夠搜索所有字段。haystack solr搜索全部字段

我可以做一個.filter(content='string')但這只是搜索任何領域都在document=True

編輯 此外,一些非document=True領域有不同的過濾器/應用,以便即時猜測這會不會增加工作tokenisers他們到一個單一的領域...

回答

1

@neolaser:我想你可以通過使用DisMax搜索來實現。它允許通過多個字段進行搜索併爲每個字段指定增強值。有關詳細信息:

http://wiki.apache.org/solr/SolrRelevancyFAQ

http://wiki.apache.org/solr/DisMaxQParserPlugin

+0

謝謝你的回答,我已經給出了正確的答案,因爲它是「最近的「,但是我最終使用了dismax!所以謝謝你的回答,我確定這對其他人也有用! – neolaser 2011-09-13 23:20:27

1

您可以搜索所有領域購買,包括他們全部到您的filtering query參數或命名它們在查詢字符串(例如,如果您需要搜索「(關鍵字」搜索「((( field_1:keyword)OR(field_2:keyword)OR(field_3:keyword))「instea d)。

但是,通常最好有一個專用字段連接您需要搜索和搜索該單個字段的所有其他字段。您可以在架構中設置copyfield,以便在文檔編入索引時自動生成該內容。

+0

感謝您的答覆。我更新了這個問題,說一些領域有不同的過濾器/標記器應用,我認爲可能會排除我們的第二種選擇。我將如何使用乾草堆中的第一個選項? – neolaser 2011-06-16 23:09:59

+0

如果您使用不同的標記器,則需要在查詢中明確指定您的字段。那是問題嗎?我可以想象當您需要搜索不可預知數量的動態字段時的情況,但通常情況下,如果您的字段設置爲靜態,則只需像上面的示例一樣構建適當的查詢。不要怕它太久,Solr就可以。 – Yuriy 2011-06-17 08:42:29

1

也許你可以用'use_template'和一個顯示所有字段的模板創建第二個字段。

我從來沒有試過這樣做,但這聽起來是一個很好的方法來做到這一點。因爲OP評論

編輯:

然後我最好的選擇是eaither sublass SearchQueryset添加一個方法或創建一個函數,將循環在你的SearchIndex各個領域,並做一些事情,如:

qs = SearchQuerySet().filter(content=query) 
for field in fieldlist: 
    qs = qs.filter_or(**{'field':query}) 

我不知道這是否可行,但值得一試。

+0

我已經更新了這個問題。我一直在做你的建議,但我需要的領域有不同的過濾器/ tokenisers申請:(謝謝你的答案,在大多數情況下,這將工作 – neolaser 2011-06-16 23:11:02

+0

感謝您的更新。解決方案是繼承一系列乾草堆相關的類給雖然我認爲這意味着我不能夠使用另一個後端......幸運的是,solr非常棒,再次感謝 – neolaser 2011-06-21 05:39:09