Lucene.net - 搜索短语中的术语

时间:2014-05-14 20:03:36

标签: 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);

我想要完成的是搜索短语中任何术语的完全匹配。比方说,我的索引包含2个文档('test 123','foo')

如果我输入如下的短语:

  • '我很好'它然后返回doc'foo'
  • '我是一个测试'应该什么都不返回
  • '我是测试123'返回'测试123'

在不包含任何空格的短语中搜索像'foo'这样的单个元素正常工作。 但是当这个短语包含一个空白区域时,我正在努力。 “我是测试123”和“测试123”一样没有任何回报。

我怀疑它可能来自anylizer,所以我尝试了StandardAnalyzer以及KeywordAnalyzer,但问题仍然存在。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

当我用字符串搜索时,我会这样做:

var searchString ="我是foo&#34 ;; var searchTerms = searchString.Split('');

查询看起来像是:

+(name:i name:am name:foo) name:"I am foo"

解释: +在查询之前意味着,在匹配之前,其中一个术语需要存在。 我个别搜索每个词,更多匹配=更高的分数 我也搜索searchString作为一个prase,因为那时我确保如果它是直接匹配,它将获得最高分。

您甚至可以使用模糊和通配符进行搜索,因此您可以达到非常宽的范围,但仍然可以在顶部获得最佳效果。

希望它有所帮助。