Lucene - 在不同领域搜索几个术语

时间:2009-10-08 09:18:15

标签: full-text-search lucene lucene.net

我有一个从数据库填充的Lucene索引。我存储/索引一些字段,然后添加一个FullText字段,我在其中索引所有其他字段的内容,因此我可以进行常规搜索。

现在假设我有一个包含以下两个字段的文档: fld1 - “三星推出全新22''液晶屏” fld2 - “索尼爱立信手机电池爆炸”

如果用户使用“三星手机”,他可能只想要关于三星手机的新闻,而不是有关于三星屏幕和索尼手机信息的文件,但是在FullText字段中搜索,我会将其视为有效结果。 有没有一个很好的方法来处理这个?

我想过使用一些分隔符和执行SpanNotQuery进行索引,因此FullText字段会包含以下内容: “三星发布了一款新的22英寸LCD屏幕MYLUCENESEPARATOR索尼爱立信手机的电池爆炸”,然后用MYLUCENESEPARATOR作为非跨越术语进行SpanNotQuery。

这是一个很好的解决方案吗?两个以上的术语是否可以很好地扩展?我担心它会成为性能杀手。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

如果字段数量有限,您可以将两个描述字符串放在两个不同的字段中。然后,您可以使用MultiFieldQueryParser搜索这些字段。由于这些是两个单独的字段,因此仅当两个术语都出现在带有AND运算符的单个字段中时,文档才会匹配。

让我们举个例子吧。 fld1 - “三星推出全新22''液晶屏” fld2 - “索尼爱立信手机电池爆炸”

如果这些索引在单独的字段fld1& fld2,您的查询变为

(+fld1:samsung +fld1:phone) (+fld2:samsung +fld2:phone)

多字段查询可帮助您轻松构建此类查询,以便您无需为多个字段重复查询。