1

如何在 Lucene 中对两个多词短语进行邻近搜索。例如,我想查找所有包含“宠物店”一词的 5 个单词的所有黑色实验室*(黑色拉布拉多犬、黑色拉布拉多犬等)。我应该使用哪种分析仪?推荐使用哪种查询解析器?我正在使用 Lucene.NET。我已将 ComplexPhraseQueryParser 从 Java 移植到 C#,但该解析器似乎并没有起到作用(或者也许我只是用错了)。我刚刚开始使用 Lucene,非常感谢您的帮助。

4

2 回答 2

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

默认的 LuceneQueryParser不支持跨度查询,但您可以尝试使用Surround 查询解析器。我在文档中找不到太多其他内容。

您可能还会发现此答案此博客文章很有用。

于 2012-06-11T16:13:28.913 回答
0

你只需要设置 slop

于 2012-05-31T15:50:08.547 回答