搜索短语内的术语

本文关键字:术语 短语 搜索 | 更新日期: 2023-09-27 18:03:18

我创建了一个如下的索引:

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')

如果我输入一个短语:

  • 'I am foo'返回文件'foo'
  • 'I am a test'应该不返回任何值
  • "我是测试123"返回"测试123"

在不包含任何空格的短语中搜索单个元素(如'foo')可以正常工作。但当这个短语包含空白时,我就很困惑了。'I am test 123'和'test 123'一样,什么也不返回。

我怀疑它可能来自分析器,所以我尝试了StandardAnalyzer以及KeywordAnalyzer,但问题仍然存在。

搜索短语内的术语

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

var searchString = "我是foo";var searchTerms =搜索字符串。

分裂(' ');

查询应该是这样的:

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

来解释:+在查询前表示,其中一个词需要在匹配之前出现。我单独搜索每个词,匹配越多=得分越高我搜索的searchString也作为一个短语,因为我确保如果它是一个直接匹配,它将得到最高分。

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

希望能有所帮助。