繁体   English   中英

多项(Lucene)查询能否仅对选定字段进行模糊搜索?

[英]Can a multiterm (lucene) query do a fuzzy search on only selected fields?

我正在尝试对更广泛的多项查询中的选定字段实施模糊查询。 例如,假设字段为nameemail 我想对姓名进行模糊搜索,但是我只想在email字段上完全匹配

目前,我像这样构造解析器(这是使用FlexLucene的,因此实际上是在C#中,但是它应该与常规Java Lucene具有完全的奇偶校验):

var parser = new MultiFieldQueryParser(fields, analyzer);

其中fields是包含{"name", "email"}string[] ,而analyzerStandardAnalyzer ,与索引时使用的相同。

因此,我正在寻找以下内容:诸如“ smith”之类的查询字符串应会导致{ 'name': 'Harry Smith', 'email': 'harry@where.com' }{ 'name': 'Tom Smythe', 'email': 'tom@tom.com' }{ 'name': 'Sara Jones', 'email': 'smith@xyz.com' } ,但不是{ 'name': 'Tom Jones', 'email': 'smythe@abc.com' }

如果考虑从代码创建查询,则查询应创建为(对于Java版本):

//match Smith Smythe
Query name = new PrefixQuery(new Term("name", name)) 
//match smith@xyz.com but not a smythe@abc.com
Query email = new PrefixQuery(new Term("name", name+"@")) 
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(name, BooleanClause.Occur.SHOULD);
builder.add(name, BooleanClause.Occur.SHOULD);
Query query = builder.build();

但是据我了解,解析器中需要您。 Lucene解析器具有复杂的逻辑(通配符,增强等),并且不清楚其实际需要什么。 至于简单的解决方案,我建议覆盖方法getFieldQuery ,如果未设置该字段,则应创建一个如上所述的查询,否则将调用传递给parent。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM