У меня UUID правильно проиндексирован как целое слово, используя PatternTokenizerFactory
, например 024bb09c-86b4-4d73-8483-bf7839e407d8
.Hibernate Поиск, как правильно искать UUID
Но при поиске, запрос с этой полной строкой вернет ошибку говоря,
The query string '024bb09c-86b4-4d73-8483-bf7839e407d8' applied on field 'id' has no meaningfull tokens to be matched. Validate the query input against the Analyzer applied on this field.
Означает ли это, мне нужно установить конкретный анализатор по подготовке запроса?
Код, который сообщает об этом ошибка заключается в следующем,
lucene = builder.keyword()
.onFields("id", "status", "submitter")
.matching(keyword)
.createQuery();
EDIT:
Здесь анализатор используется для индексирования, наше сырье идентификатор в виде group/UUID
, поэтому я использую PatternTokenizer раздеться префикс,
@AnalyzerDef(
name = "idanalyzer",
tokenizer = @TokenizerDef(
factory = PatternTokenizerFactory.class,
params = {
@Parameter(name = "pattern", value = ".*/(.*)"),
@Parameter(name = "group", value = "1")
}
),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
}
)
А вот код в Сущности,
@Id
@DocumentId
@Analyzer(definition = "idanalyzer")
private String id;
Вы просмотрели эту статью http://stackoverflow.com/questions/12753642/searching-for-uuid-in-lucene-not-working? – Filip
, пожалуйста, поделитесь также отображением сущности, по крайней мере, как индексируется идентификатор. – Sanne
Похоже, проблема заключается в том, что после выполнения анализатора ничего не осталось от запроса. Как выглядит ваш анализатор? – femtoRgon