C# Lucene.net-搜索短语中的术语
我创建了一个索引,如下所示:C# Lucene.net-搜索短语中的术语,c#,lucene.net,C#,Lucene.net,我创建了一个索引,如下所示: var doc = new Document(); doc.Add(new Field("id", product.Id.ToString(), Field.Store.YES, Field.Index.NO)); doc.Add(new Field("name", product.Label, Field.Store.NO, Field.Index.NOT_ANALYZED)); writer.AddDocument(doc); 我试图完成的是搜索短语中任何术语
var doc = new Document();
doc.Add(new Field("id", product.Id.ToString(), Field.Store.YES, Field.Index.NO));
doc.Add(new Field("name", product.Label, Field.Store.NO, Field.Index.NOT_ANALYZED));
writer.AddDocument(doc);
我试图完成的是搜索短语中任何术语的精确匹配。比如说,我的索引包含两个文档(“test123”、“foo”)
如果我输入一个短语,如:
- “I am foo”然后返回文档“foo”
- “我是一个测试”不应返回任何内容
- “我是测试123”返回“测试123”
我怀疑它可能来自anylizer,所以我尝试了StandardAnalyzer和KeywordAnalyzer,但问题仍然存在。任何帮助都将不胜感激。当我使用字符串搜索时,我会: var searchString=“我是foo”; var searchTerms=searchString.Split(“”) 查询将类似于:
+(name:i name:am name:foo) name:"I am foo"
解释:
+在查询表示匹配之前,其中一个术语必须存在。
我单独搜索每个词,更多的匹配=更高的分数
我也在搜索字符串,因为这样我可以确保如果它是直接匹配的话,它会得到最高的分数
您甚至可以使用模糊和通配符进行搜索,因此您的搜索范围非常广,但仍然可以在顶部获得最佳结果
希望对您有所帮助。使用实体,它会给出如下内容:Context.entity.Where(x=>phrase.ToLower().Contains(x.Term.ToLower()).ToList();。如何使用Lucene中的索引执行相同的请求,而不是每次都以数据库为目标?