我正在尝试整理一个在我们的某个网站上使用Lucene.NET的测试用例。我想做以下事情:
单个唯一ID中的索引。 以逗号分隔的术语或标签字符串编制索引。
例如。
第1项: Id = 1 Tags = Something,Separated-Term
然后,我将构建搜索结构,以便我可以查找针对标记的文档,即
标签:OR标签:单独的术语
我需要维护确切的术语值才能搜索它。
我有一些正在运行的东西,正在按预期解析搜索查询,但我没有看到任何结果。这是一些代码。
我的解析器(_luceneAnalyzer传递到我的索引服务中):
var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_CURRENT, "Tags", _luceneAnalyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
return parser;
我的Lucene.NET文档创建:
var doc = new Document();
var id = new Field(
"Id",
NumericUtils.IntToPrefixCoded(indexObject.id),
Field.Store.YES,
Field.Index.NOT_ANALYZED,
Field.TermVector.NO);
var tags = new Field(
"Tags",
string.Join(",", indexObject.Tags.ToArray()),
Field.Store.NO,
Field.Index.ANALYZED,
Field.TermVector.YES);
doc.Add(id);
doc.Add(tags);
return doc;
我的搜索:
var parser = BuildQueryParser();
var query = parser.Parse(searchQuery);
var searcher = Searcher;
TopDocs hits = searcher.Search(query, null, max);
IList<SearchResult> result = new List<SearchResult>();
float scoreNorm = 1.0f / hits.GetMaxScore();
for (int i = 0; i < hits.scoreDocs.Length; i++)
{
float score = hits.scoreDocs[i].score * scoreNorm;
result.Add(CreateSearchResult(searcher.Doc(hits.scoreDocs[i].doc), score));
}
return result;
我的索引中有两个文档,一个标记为“Something”,另一个标记为“Something”和“Separated-Term”。重要的是 - 保留在条款中,因为我希望与完整值完全匹配。
当我搜索“tags:Something”时,我没有得到任何结果。
问题
我应该使用什么分析器来实现我追求的搜索索引? 是否有任何指针可以将这样的搜索组合在一起? 为什么我当前的搜索没有返回任何结果?
非常感谢
答案 0 :(得分:0)
要考虑一些想法:
希望这有帮助,
答案 1 :(得分:0)
看来您可以为文档添加多个具有相同名称的字段,因此我将代码更改为:
foreach (string tag in vehicle.Tags)
{
var tags = new Field(
TAGS,
tag,
Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.YES);
doc.Add(tags);
}
我现在可以在“标签”字段中按单个或多个标签进行搜索。