【问题标题】:Lucene - Searching several terms in different fieldsLucene - 在不同领域搜索多个术语
【发布时间】:2009-10-08 09:18:15
【问题描述】:

我有一个从数据库填充的 Lucene 索引。我存储/索引一些字段,然后添加一个全文字段,在其中索引所有其他字段的内容,以便进行一般搜索。

现在假设我有一个包含以下两个字段的文档: fld1 - “三星发布新的 22 英寸 LCD 屏幕” fld2 - “索尼爱立信手机的电池爆炸”

如果用户使用“三星手机”,他可能只想要关于三星手机的新闻,而不是包含三星屏幕和索尼手机信息的文档,但通过全文字段搜索,我会得到这个有效结果。 有什么好的方法来处理这个吗?

我考虑过使用一些分隔符进行索引并执行 SpanNotQuery,因此 FullText 字段将包含以下内容: “三星发布新的22英寸液晶屏MYLUCENESEPARATOR索尼爱立信手机电池爆炸”,然后用MYLUCENESEPARATOR作为non-spanning term进行SpanNotQuery。

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

【问题讨论】:

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


    【解决方案1】:

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

    让我们举个例子。 fld1 - “三星发布新的 22 英寸 LCD 屏幕” fld2 - “索尼爱立信手机的电池爆炸”

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

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

    多字段查询可帮助您轻松构建此类查询,因此您无需针对多个字段重复查询。

    【讨论】:

    • 我接受了你的回答,但忘记投票了。也许有点晚了,但现在才这样做:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多