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

How can I automatically convert all Lucene TermQuery objects to PrefixQuery?

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

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

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

我从未找到 'proper' 解决方案,所以我实施了一个 hack,将通配符附加到原始查询中的各个单词,然后将其提供给分析器:

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("*"),
    queryString);

Query query = new QueryParser(CONTENTS_FIELD, analyzer).parse(processedQuery);