Search 如何在Lucene中执行通配符搜索
我知道Lucene广泛支持通配符搜索,我知道您可以搜索以下内容: Stackover*(将返回Stackoverflow)Search 如何在Lucene中执行通配符搜索,search,lucene,search-engine,lucene.net,wildcard,Search,Lucene,Search Engine,Lucene.net,Wildcard,我知道Lucene广泛支持通配符搜索,我知道您可以搜索以下内容: Stackover*(将返回Stackoverflow) 也就是说,我的用户对学习查询语法不感兴趣。Lucene可以使用现成的分析器执行这种类型的通配符搜索吗?或者我应该在每个搜索查询中添加“*”吗?如果我想做类似的事情,我通常会在搜索前设置术语的格式,例如 searchTerm = QueryParser.EscapesearchTerm); if(!searchTerm.EndsWith(" ")) { searchT
也就是说,我的用户对学习查询语法不感兴趣。Lucene可以使用现成的分析器执行这种类型的通配符搜索吗?或者我应该在每个搜索查询中添加“*”吗?如果我想做类似的事情,我通常会在搜索前设置术语的格式,例如
searchTerm = QueryParser.EscapesearchTerm);
if(!searchTerm.EndsWith(" "))
{
searchTerm = string.Format("{0}*", searchTerm);
}
这将逃脱人们所赋予的任何特殊角色。
如果这个词没有以空格结尾,在结尾加上一个*。
因为*本身会导致解析异常。使用字符串操作进行此操作很难正确,特别是因为QueryParser支持boosting、短语等 您可以使用QueryVisitor将TermQuery重写为PrefixQuery
public class PrefixRewriter : QueryVisitor {
protected override Query VisitTermQuery(TermQuery query) {
var term = query.GetTerm();
var newQuery = new PrefixQuery(term);
return CopyBoost(query, newQuery);
}
}
QueryVisitor基类当前可在中找到
该代码最初发布在一个网站上,现在已经失效。这篇博文仍然是。如果您正在考虑将每个查询转换为通配符,我会问自己以下问题:
对于大量记录,LUCENE通配符搜索仍比SQL Server快。当前url: