首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene中模糊查询与SpanNear查询的结合

Lucene中模糊查询与SpanNear查询的结合
EN

Stack Overflow用户
提问于 2015-02-18 15:33:52
回答 1查看 1K关注 0票数 0

通过使用模糊查询,我在Lucene (每一个的levenshtein距离为2)中模糊地搜索输入字符串/文档中的名字和姓氏。

我还期望通过使用SpanNearQuery.,这两个术语彼此非常接近(在本例中,最多由3个术语分隔)。我也不想秩序有问题。

我构建查询的代码:

代码语言:javascript
复制
FuzzyQuery firstNameQuery = new FuzzyQuery(new Term("text", firstName), 2);
FuzzyQuery lastNameQuery = new FuzzyQuery(new Term("text", lastName), 2);

SpanQuery[] clauses = new SpanQuery[] {
    new SpanMultiTermQueryWrapper<MultiTermQuery>(firstNameQuery),
    new SpanMultiTermQueryWrapper<MultiTermQuery>(lastNameQuery)
};
SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 3, false);

我现在在单元测试中看到的是,莱文施斯坦距离1的术语似乎有效,所以"John Doa“、"Jon Dox”等将与"John Doe“匹配,而levenshstein距离2则不适用。“约翰尼·多伊”不匹配。

跨度很好,我在名字和姓氏之间最多可以有3个术语。

有人能告诉我我做错了什么吗?

更新1

对不起,我搞砸了我在这里设计的例子,出于隐私原因,我没有使用真实的数据。

我看到的是,这个查询并不像我想象的那样起作用。

输入字符串:“病人: John”查询: spanNear(SpanMultiTermQueryWrapper(text:John~2),SpanMultiTermQueryWrapper(文本:Doe~2),3,false)

这不会产生命中,即使这些术语应该完全匹配(编辑距离为0)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-19 06:37:13

Lucene 4.x模糊将匹配编辑距离2或更短的每项,您的用例的距离大于2每项(John和Johnnie是距离3)。

在我看来,它不太建议使用Lucene内置的模糊名称匹配,因为它不会正确地工作对冗长的名称(作为其每项的<2距离)和它的慢,因为它使用有限状态寻找最佳可能的匹配。

最好和最快的方法是使用"n-gram“方法进行模糊匹配(trigram模糊匹配是常见的!)

更新:看起来你可能对大写小写有问题,在我的理解中,lucene抛弃了用于模糊搜索的查询分析器。

你能试着用"john“和"doe”(两者都是小写字母)作为你的名字和姓氏,然后告诉我它是否有效。

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

https://stackoverflow.com/questions/28587401

复制
相关文章

相似问题

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