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

Java 如何将所有Lucene TermQuery对象自动转换为PrefixQuery?,java,lucene,Java,Lucene,我正在使用QueryParser和StandardAnalyzer来解析查询字符串。使用此设置,如果我搜索“快捷键”,它将与文本“键盘快捷键”不匹配 我认为这是因为查询字符串“key short”被解析为布尔查询(TermQuery(“key”),TermQuery(“short”)。如果我想让它匹配“键盘快捷键”,我必须搜索“key*short*”。我希望QueryParser能自动为我完成这项工作,即在给定查询字符串时生成:布尔查询(PrefixQuery(“key”)、PrefixQuer

我正在使用
QueryParser
StandardAnalyzer
来解析查询字符串。使用此设置,如果我搜索
“快捷键”
,它将与文本
“键盘快捷键”
不匹配

我认为这是因为查询字符串
“key short”
被解析为
布尔查询(TermQuery(“key”),TermQuery(“short”)
。如果我想让它匹配
“键盘快捷键”
,我必须搜索
“key*short*”
。我希望QueryParser能自动为我完成这项工作,即在给定查询字符串时生成:
布尔查询(PrefixQuery(“key”)、PrefixQuery(“short”)


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

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

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);
private静态最终模式查询\u WORD\u Pattern=Pattern.compile(“?