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”
在一个不包含任何空格的短语中搜索像“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中的索引执行相同的请求,而不是每次都以数据库为目标?