0

有没有一种方法可以让我们找出查询是针对普通 lucene 核心库还是针对环绕 contrib 模块的。我们能否将环绕查询解析器与 lucene 核心库的查询解析器合并,这样我们就只有一个查询解析器可以将语法检测为环绕查询或普通 lucene 查询。

4

1 回答 1

1

我不太了解环绕查询解析器,但我相当确定环绕查询解析器和默认查询解析器都处理一些相同的语法,因此您无法严格区分所有情况。我认为,与其尝试检测语法并将其相应地传递给解析器,不如选择默认情况下应该尝试哪个解析器,如果失败则回退到另一个解析器。

就像是:

//Assuming you have a lucene default QueryParser and IndexSearcher lying around.
try {
    query = org.apache.lucene.queryparser.surround.parser.QueryParser.parse(queryString);
} catch (ParseException pe) {
    query = defaultParser.parse(queryString);
}

searcher.search(query, numHits);

如果您愿意,您当然可以将其封装在您自己的 QueryParser 实现中。只需使用该逻辑实现 parse(String) 即可。

于 2013-02-08T22:11:48.657 回答