首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene中的查询类型

Lucene中的查询类型
EN

Stack Overflow用户
提问于 2010-07-29 09:01:46
回答 1查看 3.2K关注 0票数 2

Lucene NOOB警报!

我认为自己至少是一个拥有合理智力的人,然而我在理解Lucene中的查询类型时遇到了巨大的问题。

在我的特定实例中,我需要在我的文档中搜索一个字符串字段,该字段的长度只有moedrate (平均大约50个字符)。

我希望用户能够在他们正在搜索的项目中键入单词的开头。我也不希望他们提供条款的顺序。

示例字段:“通用品牌强度”

应该匹配搜索:“通用品牌实力”“品牌通用实力”..."gen bran str“"bran generic str”...等。

我可以将我的信息(示例中的每个单词)存储在单独的字段中,如果这会有帮助的话,但我不相信这会有帮助。

我目前迷失在模糊通配符和多术语短语的世界中。

有人能为我阐明整个场景吗?(是的,我已经在网上广泛地寻找帮助,但找不到像样的资源)。

顺便说一句,我使用的是Lucene 2.9,但我不认为这真的很重要。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-29 20:03:10

您不需要将每个术语存储在单独的字段中。Lucene为每个术语创建标记(如果您使用空格标记生成器),因此允许极大的搜索灵活性。

关于你的问题:

示例字段:“通用品牌强度”

应匹配搜索:“通用品牌实力”“品牌通用实力”

上面的查询将返回两个结果,后者的得分较低,原因很明显。然而,"gen bran str“"bran generic str”...等是棘手的,因为它看起来术语不是标准的“词干”,在这种情况下,你可以使用词干分析器。

最简单的方法是:

  1. 通过空格拆分您的查询短语,因此您有一个使用布尔查询的string[]
  2. ,并为每个术语创建一个查询,并在末尾附加一个通配符。

类似于:

代码语言:javascript
复制
string[] terms = query.split(" ");
BooleanQuery bq = new BooleanQuery();

foreach(string term in terms)
 bq.Add(new Query("FieldName", term + "*",...);

还有更好的查询类型,如SpanQuery、DisMax等,但既然您提到了一个noob警报,那么我认为上面的方法是最简单的(尽管可能不是最优雅的)。

HTH

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3358749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档