Lucene NOOB警报!
我认为自己至少是一个拥有合理智力的人,然而我在理解Lucene中的查询类型时遇到了巨大的问题。
在我的特定实例中,我需要在我的文档中搜索一个字符串字段,该字段的长度只有moedrate (平均大约50个字符)。
我希望用户能够在他们正在搜索的项目中键入单词的开头。我也不希望他们提供条款的顺序。
示例字段:“通用品牌强度”
应该匹配搜索:“通用品牌实力”“品牌通用实力”..."gen bran str“"bran generic str”...等。
我可以将我的信息(示例中的每个单词)存储在单独的字段中,如果这会有帮助的话,但我不相信这会有帮助。
我目前迷失在模糊通配符和多术语短语的世界中。
有人能为我阐明整个场景吗?(是的,我已经在网上广泛地寻找帮助,但找不到像样的资源)。
顺便说一句,我使用的是Lucene 2.9,但我不认为这真的很重要。
发布于 2010-07-29 20:03:10
您不需要将每个术语存储在单独的字段中。Lucene为每个术语创建标记(如果您使用空格标记生成器),因此允许极大的搜索灵活性。
关于你的问题:
示例字段:“通用品牌强度”
应匹配搜索:“通用品牌实力”“品牌通用实力”
上面的查询将返回两个结果,后者的得分较低,原因很明显。然而,"gen bran str“"bran generic str”...等是棘手的,因为它看起来术语不是标准的“词干”,在这种情况下,你可以使用词干分析器。
最简单的方法是:
类似于:
string[] terms = query.split(" ");
BooleanQuery bq = new BooleanQuery();
foreach(string term in terms)
bq.Add(new Query("FieldName", term + "*",...);还有更好的查询类型,如SpanQuery、DisMax等,但既然您提到了一个noob警报,那么我认为上面的方法是最简单的(尽管可能不是最优雅的)。
HTH
https://stackoverflow.com/questions/3358749
复制相似问题