【发布时间】:2019-06-25 17:55:57
【问题描述】:
首先,这是我的 Hibernate-Search 索引时间设置:
// ...
@Indexed(index = "XXXRequestIndex")
@AnalyzerDef(name = "toLowercaseAnalyzer",
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class)
})
public class XXXRequest implements Serializable {
// ...
@Field(analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "toLowercaseAnalyzer"))
@SortableField
private String status;
// ...
}
我看到了这个线程,其中.overridesForField(...) 在查询时在QueryBuilder 上设置了一个字段,以便使用通配符查询不区分大小写:
Hibernate Search | ngram analyzer with minGramSize 1
我只需要对特定字段(“状态”)执行类似操作,但我不使用QueryBuilder,而是使用@987654327 解析传入的lucene 查询字符串@。我无法将其更改为使用QueryBuilder 构建查询,因为代码调用者使用 lucene 查询解析器语法发出他们自己的动态查询很重要(如在https://lucene.apache.org/core/2_9_4/queryparsersyntax.html 中或多或少地描述)
所以当调用者作为 lucene 查询status:*n\ Pr* 发送时,它与“处理中”不匹配。
但是像status:*n\ pr* 这样的查询确实匹配“处理中”。
我的查询代码:
Analyzer analyzer = new KeywordAnalyzer();
String[] fields = ...
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
fields,
analyser);
Query luceneQuery = queryParser.parse(luceneFilterString);
List results = fullTextQuery.getResultList();
如何使查询不区分大小写?
【问题讨论】:
标签: java lucene wildcard hibernate-search case-insensitive