""黑色实验室*""宠物店""~5在Lucene(邻近搜索多词短语)

bal*_*azs 1 lucene lucene.net

如何在Lucene中对两个多词短语进行邻近搜索.例如,我想找到所有黑色实验室*(黑色拉布拉多犬,黑色拉布拉多犬等),用5个单词的"宠物店".我应该使用哪种分析仪?建议使用哪个查询解析器?我正在使用Lucene.NET.我已将ComplexPhraseQueryParser从Java移植到C#,但该解析器似乎没有做到这一点(或者我可能只是错误地使用它).我刚刚开始使用Lucene,所以非常感谢你的帮助.

Ric*_*ole 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);
Run Code Online (Sandbox Code Playgroud)

默认的Lucene QueryParser不支持跨度查询,但您可以尝试使用Surround查询解析器.我在文档的方式上找不到太多其他东西.

您也可以找到这个答案,这个博客文章很有用.