我无法确定这一点。我尝试了几种不同的分析仪,它们都让我很接近,但不完全是我想要的。目前不能使用SOLR。
我想要的例子:
Input: 200
Matches: 200 E Dragon Dr.
200 W Paragon Rd.
200 Lick Skillet Dr.
Input: 200 E
Matches: 200 E Dragon Dr.
200 E Toll Rd.
Input: 200 E D
Matches: 200 E Dragon Dr.
如果我使用简单的分析仪,那么它与数字不匹配。空白分析器只用数字就可以获得所需的效果,但是一旦我添加E它就不会像我期望的那样返回。什么是最好的分析器或我使用错误的查询?
谢谢,
编辑:
我已经采取了以下答案,并进行了大量的谷歌搜索,我正在接近使用查询解析器和whitespaceanalyzer。我只是让查询解析器确定最佳查询,它似乎工作。
答案 0 :(得分:1)
尝试使用关键字分析器和查询解析器来搜索Lucene中的地址字段。我正在使用MultiFieldQueryParser,但您也可以使用常规查询解析器:
public StartsWithQuery Prefix(string prefix, string[] fields, Dictionary<string,string> filterFields = null )
{
if(!string.IsNullOrEmpty(prefix))
{
var parser = new MultiFieldQueryParser(Version.LUCENE_29, fields, new KeywordAnalyzer());
var boolQuery = new BooleanQuery();
boolQuery.Add(parser.Parse(prefix + "*"), BooleanClause.Occur.MUST);
if (filterFields != null)
{
foreach (var field in filterFields)
{
boolQuery.Add(new TermQuery(new Term(field.Key, field.Value)), BooleanClause.Occur.MUST);
}
}
}
return this;
}