我是lucene.net的新手。我正在开发一个API来扫描名称列表。参数将输入人员的全名。
然而,根据当前的代码,如果我在名称列表中输入'Pit Bull‘搜索,就会出现'Pit Bull Adam’、'Pit Tim Bull‘等等.
但我想要的结果是“比特牛”或“公牛坑”。
我是否使用正确的分析器或查询?我该怎么办?
这是我创建的索引。
var doc = new Document();
doc.Add(new Field("Id", model.EntityId.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("FullName", model.FullName, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Name2", model.Name2?? "", Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Name3", model.Name3?? "", Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Gender", indexModel.GenderType.HasValue ? indexModel.GenderType.Value.ToString() : "", Field.Store.YES,
Field.Index.NOT_ANALYZED, Field.TermVector.NO));这是我的搜索方法。
using (var indexReader = IndexReader.Open(ramDirectory, true))
{
using (var searcher = new IndexSearcher(indexReader))
{
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
MultiFieldQueryParser _MultiMatchName = new
MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30,
new string[] { "FullName", "Name2", "Name3" }, analyzer);
const int hitLimits = 1000;
_MultiMatchName.DefaultOperator = QueryParser.Operator.AND;
var query = new BooleanQuery();
query.Add(inputName,Occur.MUST);
}
}发布于 2018-11-21 02:26:54
原来我应该使用WhitespaceAnalyzer。创建索引和搜索索引时。
using (var indexReader = IndexReader.Open(ramDirectory, true))
{
using (var searcher = new IndexSearcher(indexReader))
{
var analyzer = new WhitespaceAnalyzer();
MultiFieldQueryParser _MultiMatchName = new
MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30,
new string[] { "FullName", "Name2", "Name3" }, analyzer);
const int hitLimits = 1000;
_MultiMatchName.DefaultOperator = QueryParser.Operator.AND;
var query = new BooleanQuery();
query.Add(inputName,Occur.MUST);
}
}https://stackoverflow.com/questions/53335651
复制相似问题