搜索短语内的术语
本文关键字:术语 短语 搜索 | 更新日期: 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也作为一个短语,因为我确保如果它是一个直接匹配,它将得到最高分。
您甚至可以使用模糊和通配符进行搜索,因此您可以覆盖非常广的范围,但仍然可以在顶部获得最佳结果。
希望能有所帮助。