如何在Lucene中对两个多词短语进行邻近搜索。例如,我想找到所有 黑色实验室*(黑色拉布拉多,黑色拉布拉多等)带有5个单词的“宠物店”。我应该使用哪种分析仪?建议使用哪个查询解析器?我正在使用Lucene.NET。我已将ComplexPhraseQueryParser从Java移植到C#,但该解析器似乎没有做到这一点(或者我可能只是错误地使用它)。我刚刚开始使用Lucene,所以非常感谢你的帮助。
答案 0 :(得分:5)
您可以使用SpanQuery:
new SpanNearQuery(
new SpanQuery[] {
new SpanNearQuery(
new SpanQuery[] {
new SpanTermQuery(new Term(FIELD, "black")),
new SpanMultiTermQueryWrapper<WildcardQuery>(new WildcardQuery(new Term(FIELD, "lab*"))),
},
0,
true),
new SpanNearQuery(
new SpanQuery[] {
new SpanTermQuery(new Term(FIELD, "pet")),
new SpanTermQuery(new Term(FIELD, "shop")),
},
0,
true),
},
5,
true);
默认的Lucene QueryParser
不支持范围查询,但您可以尝试Surround query parser。我在文档的方式上找不到其他的东西。
您可能还会发现this answer和this blog post有用。
答案 1 :(得分:0)
您只需要set the slop。