Во-первых, вот моя настройка времени индексации 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 Поиск | ngram анализатор с minGramSize 1
Мне нужно сделать что-то подобное только для определенного поля («статус»), но я НЕ использую QueryBuilder
, вместо этого я анализирую строку входящего запроса lucene, используя MultiFieldQueryParser
, Я не могу изменить это, чтобы переключиться на построение запроса, используя 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();
Как сделать запрос без учета регистра?