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

时间:2012-05-29 13:40:35

标签: lucene lucene.net

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

2 个答案:

答案 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 answerthis blog post有用。

答案 1 :(得分:0)

您只需要set the slop