2011-04-13 100 views
3

我想要使用Lucene.Net制作Proximity Search。我看到this question看起来像是他的答案,但没有代码被提供。 Java文档说要使用〜字符和中间的字数,但我没有看到这个字符在代码中的位置。任何人都可以给我一个使用Lucene.Net进行接近搜索的例子吗?Proximity搜索示例Lucene.Net

编辑:

我到目前为止有:

IndexSearcher searcher = new IndexSearcher(this.Directory, true); 

string[] fieldList = new string[] { "Name", "Description" }; 

List<BooleanClause.Occur> occurs = new List<BooleanClause.Occur>(); 
foreach (string field in fieldList) 
{ 
    occurs.Add(BooleanClause.Occur.SHOULD); 
} 


Query searchQuery = MultiFieldQueryParser.Parse(this.LuceneVersion, query, fieldList, occurs.ToArray(), this.Analyzer); 

如果我尝试添加“〜”与任意数量的MultiFieldQueryParser它的错误了说了FuzzySearch值应该在0.0到1.0之间,但是我想要一个接近搜索3个分开的单词Ex。 “我的搜索”〜3

+0

除非我失去了一些东西,〜字符直接进入查询的文本(如在您链接到的文档)。 – Odrade 2011-04-13 00:42:28

+0

@Orade请看我对这个问题所做的修改。我尝试过,但解析器认为我试图做一个FuzzySearch。 – FelixMM 2011-04-13 00:47:48

+0

对不起,我没有对Lucene的.NET任何实际的专业知识。我只是觉得你可能会错过文档中的一些明显的东西。不过,它看起来并不那样。 – Odrade 2011-04-13 16:41:30

回答

8

代字号意味着如果将其应用于单个字词,则表示fuzzy search,如果将其应用于短语,则表示proximity search。您收到听起来像是你将它放在一个单一期限(短期〜10),而不是使用一个短语(“一词术语”〜10)的错误。

要做到接近搜索中使用的波浪线,“〜”符号在短语结束。

1

Lucene.NET和相同版本的经典java lucene之间的唯一区别应该是内部的而不是外部的 - 操作目标是有一个非常兼容的项目,特别是在输入(查询)和输出(索引文件)端。所以它应该工作,但它适用于java lucene。如果没有,这是一个错误。

+0

难道你对我怎么可能实现接近搜索一些代码的例子吗?我没有使用和Java Lucene也不Lucene.Nat之前提供的文档不是很大,对于Lucene.Net至少 – FelixMM 2011-04-14 12:35:50