我如何将所有Lucene TermQuery对象自动转换为PrefixQuery?

问题描述 投票:0回答:1

我将QueryParserStandardAnalyzer结合使用来解析queryString。使用此设置,如果我搜索"key short",它将与文本"keyboard shortcut"不匹配。

我认为这是因为queryString "key short"被解析为BooleanQuery(TermQuery("key"), TermQuery("short"))。如果我希望它匹配"keyboard shortcut",则必须搜索"key* short*"。我希望QueryParser自动为我执行此操作,即在给定queryString BooleanQuery(PrefixQuery("key"), PrefixQuery("short"))时产生:"key short"

这是正确的方法吗?如果是这样,我应该怎么做?

java lucene
1个回答
0
投票

我从来没有找到解决这个问题的“合适的”解决方案,所以我实现了一种将通配符附加到原始查询中的各个单词,然后将其提供给分析器的黑客:

private static final Pattern QUERY_WORD_PATTERN = Pattern.compile("(?<= |^)(?!AND|OR)(\\w+)(?= |$)");

...

String processedQuery = String.format("%s OR %s",
    QUERY_WORD_PATTERN.matcher(queryString).replaceAll("$1*"),
    queryString);

Query query = new QueryParser(CONTENTS_FIELD, analyzer).parse(processedQuery);
© www.soinside.com 2019 - 2024. All rights reserved.