如何从Lucene.net获得更多

时间:2009-02-10 13:40:51

标签: lucene.net

我正在尝试将Lucene.net纳入我的网络搜索。

目前我有一个lucene.net索引,其中包含+1万个文档,每个文档有7个字段。 最后一个字段是“all”字段,其中包含先前字段连接的内容。搜索所有字段的速度非常快:)

但我觉得这里还有更多内容。如何在不使用“all”字段的情况下进行搜索,在所有字段上搜索一个或多个空格分隔的字符串? 我希望能够为某些领域赋予权重。此外,如果搜索包含关于发生命中的WHERE的信息,那将非常好,所以我可以在结果中显示它。

我认为这一切都是可能的,但我不会随便看看如何 有什么帮助吗?

3 个答案:

答案 0 :(得分:4)

我们做类似的事情,诀窍是在查询字符串中指定字段:

(+Tier1:ribbon^1)^4 OR (+Tier2:ribbon^1)^4 OR (+Tier3:ribbon^1) OR (+Tier4:q*ribbon*^1)^12

在上面的示例中,用户在我们的应用程序中搜索了“功能区”。我们在不同的字段中有不同的数据段,最后的字段“Tier4”包含连接在一起的所有先前的术语。我们在前面加上一个“q”,所以我们可以做领先的外卡,也是:

(+Tier4:q*ribbon*^1)^12

最后,我们使用插入符号(^)进行提升。这最终会以不同的方式加权。需要一段时间才能获得正确的提升,而且我仍然不会对他们百分百满意,但他们确实会产生很大的影响。

答案 1 :(得分:3)

我认为您不需要维持“全部”字段。

  1. 查看使用“MultiFieldQueryParser”。它不接受查询解析器使用的单个默认字段,而是接受一个字段名称数组(除索引分析器外)。
  2. 术语提升应按“QueryParser”工作(即不需要特殊操作)。我应该补充一点,我发现标准得分对我来说似乎没问题(场地长度,比赛次数等)而没有使用提升的条款。
  3. Lucene.Net(当然,SVN 2.3目前正在构建)包括来自Java源代码的Highlight包的端口。它确实有一些怪癖(其中最重要的是,它首先开始可能很棘手),但它基本上有效。
  4. 祝你好运

答案 2 :(得分:1)

你必须得到Lucene in Action。虽然关于原始(即Java)Lucene实现,它包含了您需要的所有信息:有关boost,highlighters,qwery解析器等。