2009-12-16 165 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