c# - Lucene .net 搜索具有不同序列的文本
问题描述
我是 lucene.net 的新手。我正在开发一个 API 来扫描名单。参数将输入人的全名。
但是,使用当前代码,如果我在名单上输入“Pit Bull”搜索,它将出现“Pit Bull Adam”、“Pit Tim Bull”等...
但我想要的结果只是“Pit Bull”或“Bull Pit”。
我是否使用了正确的分析器或查询?我该怎么办?
这是我创建的索引。
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);
}
}
解决方案
原来我应该使用 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);
}
}
推荐阅读
- profiling - 是否有一种简单的方法可以在运行时检测是否启用了 JRuby 分析?
- go - 无头 chromedp 等到下载完成
- javascript - 是否可以在使用 vuejs 的用户输入旁边创建一个带有 v-select 的搜索功能
- regex - 清漆 modsecurity 规则语法错误
- dompdf - Laravel Dompdf 两列布局
- c# - 更改 ItemDatabound 上数据列表内的链接按钮前景色
- java - 无法将 2020 年 4 月 15 日上午 12:14:17 的日期解析为 LocalDatetime
- hadoop - 在将模型部署到 AKS PipelineModel.load 时抛出 org.apache.hadoop.mapred.InvalidInputException
- spring - 我如何解决 Line xsi:schemalocation 中的这个错误
- pgbadger - pgbadger 在 Fedora 上没有找到任何查询