2013-03-29 100 views
0

我正在運行SOLR 3.6,並且有索引標記的文檔。當用戶輸入搜索詞組時,我希望能夠找到包含該查詢內包含的標籤的文檔。例如,搜索「任何有標籤的文檔」的用戶將匹配具有「小船」作爲標籤的文檔。在SOLR中,我如何查詢以在用戶提供的搜索查詢中查找索引關鍵字?

我知道你可以做通配符搜索,但我需要將通配符應用於solr字段,而不是搜索查詢。

MySQL的等效於此的將是:

SELECT * FROM `documents` WHERE "Any document that has boats tagged" LIKE 'CONCAT('%', `document`, '%'); 

所以我需要一個SOLR工廠,將允許這種類型的查詢:

*document*:"Any document that has boats tagged" 

回答

0

如果Solr的tags字段是一個多值在索引時間和查詢時間期間使用LowerCaseFilterFactory的文本字段,則可以簡單地發出此查詢:

q=tags:(Super fast boats) 

(我在這裏改了你的例子。)這會給你所有的3個標籤首先(如果有的話),其次是具有2個標籤(如果有的話),然後是1個標籤的文件。

這是假設在你的schema.xml中你得到了<solrQueryParser defaultOperator="OR"/>。如果你有一個,而是,你需要OR來界定的話,如:

q=tags:(any OR document OR that OR has OR boats OR tagged) 

(你也可以使用詞幹爲您標籤和查詢匹配更多的標籤,但是這是你需要嘗試的東西並作出決定。)

+0

這很有幫助,但如果標記字段可以是多個單詞。因此,對「超級快艇」的查詢應該將文件與標籤「超級快」和「快艇」相匹配,但它不應該與只有「快」標籤的文件相匹配。 – user983423

+0

然後,您需要在調用Solr之前構建Solr查詢,例如:'q = tags:((「super fast」或「fast boats」)AND -fast)'。這意味着你的應用知道所有的標籤名稱,這可能是不可行的。另一種方法是查看返回文檔的分數(添加請求參數'fl = *,分數'來查看分數)。匹配最大標籤的文檔將獲得最高分數,只有一個標籤匹配的文檔將是最低分數。 – arun