2016-03-21 4 views
0

У меня 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; 
+0

Вы просмотрели эту статью http://stackoverflow.com/questions/12753642/searching-for-uuid-in-lucene-not-working? – Filip

+0

, пожалуйста, поделитесь также отображением сущности, по крайней мере, как индексируется идентификатор. – Sanne

+0

Похоже, проблема заключается в том, что после выполнения анализатора ничего не осталось от запроса. Как выглядит ваш анализатор? – femtoRgon

ответ

0

Я наконец выяснил решение, которое должно явно указывать KeywordAnalyzer для использования в запросе идентификатора. Это немного сложно найти, потому что изначально я использую Hibernate Search DSL-код для создания запроса, но для использования специализированного анализатора я могу найти код только с Lucene Parser.

Вот отрывок,

  QueryParser parser = new QueryParser(Version.LUCENE_31, "instanceId", new KeywordAnalyzer()); 
      try { 
       Query lucene = parser.parse(keyword); 
      } 

И я просто добавить этот запрос в другие запросы, построенные с помощью Hibernate Search DSL.

 Смежные вопросы

  • Нет связанных вопросов^_^