2012-12-07 31 views
0

我以java對象的形式獲取搜索請求,其中我構造了一個SOLR查詢對象並查詢索引。如何在同一字段上執行精確搜索和詞幹搜索取決於solr中的運算符

例如,假設用戶想要對稱爲標題的字段進行精確搜索。他將派遣形式

Field = "title", value = "Algebra", Operator = "EQUALS" 

的查詢,當我看到運營商爲「等於」,構建一個Solr的查詢像這樣

title:Algebra 

對於外卡或莖搜索請求會是這樣這樣,

Field = "title", value = "Algebra", Operator = "LIKE" 

由於運營商是 「喜歡」 的Solr查詢我正在建設,

title:*Algebra* 

這裏的問題是通配符和其他詞幹選項的工作標題字段在我的schema.xml中定義爲text_general和text(通過複製字段選項),所以當我使用運算符「:」它會阻止搜索和在標題字段中檢索具有代數詞的結果,其中,我期望的輸出只是標題爲代數的記錄。

我知道一個解決方案,我需要在配置文件中將標題字段更改爲「字符串」。但是這會影響我的搜索和通配符搜索選項。

所以基本上我想要一個字段來支持梗概搜索(和所有其他text_general字段選項)以及基於我傳遞給它的運算符的精確匹配。 這是否可能。如果這樣指導我如何實現相同。

回答

1

您必須有兩個字段,一個用於詞幹/處理版本,另一個用於乾淨字符串版本。使用<copyField>以確保索引時填充兩者。

雖然沒有「全局」約定,我建議採用命名約定爲字段名稱取決於它的處理。如果您將字段名稱設置爲字符串,則您將fieldname_stemmed設置爲文本字段(或fieldname_text),如果您看到Operator ='LIKE',請將_stemmed或_text附加到字段名稱。你也可以用相反的方法做到這一點,讓常規字段名被阻止和處理,而你有fieldname_clean作爲確切的版本。

+0

非常感謝你..你的建議幫了我很多.. – NitZRobotKoder