2009-12-16 162 views
3

我使用Sitecore的,並有多重表場,我想利用Lucene搜索上。我遇到的問題是該字段是實際值的管道分隔列表,並且此列表中的項目數量可能介於0和無限(理論上講,實際上可能只有一兩種可能性)之間。我無法成功地使用通配符查詢,並且我無法想象如何將此字段分成多個字段,因爲列表中的項目數量未知。Lucene.Net搜索列表

+0

您能否提供一個問題的例子?你有一個可以有多個(許多)值的領域,還是比這更復雜? – HakonB 2009-12-16 20:29:18

+0

當然,例如,我試圖搜索的字段包含值: {303FF303-E8A7-456B-8861-4D7B9CE92D88} | {F88DF50F-928B-41AC-9280-3964AEFA530E} | {B0A7516B-1C97-4134 -8E06-73433E3AE0B7} 而在我的應用程序需要搶在這個字段中的值{303FF303-E8A7-456B-8861-4D7B9CE92D88}所有文件。 – Kyle 2009-12-17 14:43:42

回答

5

我已經使用了類似的技術在搜索到一個類別層次結構中進行搜索。我使用以下方法構建查詢,將艱苦工作留給了QueryParser類。我通常將這個查詢添加到一個布爾查詢。

的QueryParser的通常做了偉大的工作,我經常用它構建了我的大部分Lucene的查詢 - 這似乎是建立一個特定查詢了很多的時間時,做一個更好的工作比我!

你可以做的另一件事是使用的QueryParser來構建它,然後設置一個斷點,看看如何查詢已被創建,然後用特定的查詢類型的更新代碼。

private Query GetQuery(Sitecore.Data.ID id) 
{ 
    string categoryId = id.Guid.ToString(); //turn ID to string 
    StandardAnalyzer analyzer = new StandardAnalyzer(); //use standard analyzer 
    QueryParser parser = new QueryParser("categories", analyzer); //search inside category field 
    Query query = parser.Parse(categoryId); //get the query 
    return query; 
} 
+0

我想你的方法如何使用的QueryParser爲我所有的領域,但查詢竟然是可笑緩慢,當我試圖用這個查詢兩個外卡查詢,添加到我的布爾查詢。 QueryParser比手寫查詢慢嗎? – Gabbar 2012-11-08 16:14:03