Поиск Lucene / Hibernate - Запрос связанных коллекций? - PullRequest
2 голосов
/ 05 ноября 2011

Я пишу приложение на основе Seam, использующее JPA / Hibernate и Hibernate Search (Lucene).У меня есть объект с именем Item, который имеет отношение «многие ко многим» к ключевому слову объекта.Это выглядит так (некоторые аннотации опущены):

@Indexed
public class Item {

   ...

  @IndexedEmbedded
  private List<Keyword> keywords;

   ...
}

@Indexed
public class Keyword {

   ...

  @Field
  private String value;

   ...
}

Я хотел бы иметь возможность выполнить запрос для всех объектов Item, которые содержат определенное значение ключевого слова.Я настроил множество тестовых объектов в своей базе данных, и кажется, что индексы создаются правильно.Однако, когда я создаю и запускаю запрос для "keywords.value" = <MY KEYWORD VALUE>, я всегда получаю 0 результатов.

Имеет ли Hibernate Search / Lucene возможность выполнять запросы этого типа?Есть ли что-то еще, что я должен делать?Могли ли я пропустить дополнительные аннотации?

1 Ответ

1 голос
/ 31 марта 2012

Hibernate Search идеально подходит для такого рода запросов;но это можно сделать более простым способом.

По вашей проблеме: текст, проиндексированный с помощью Hibernate Search (Lucene), будет проанализирован, и будет применяться анализатор по умолчанию:

  1. Lowerрегистр ввода
  2. Разделение в отдельных терминах на пробел

Так что если вы определяете запросы как TermQuery (я предполагаю, что это то, что вы сделали, так как это самая простая форма), то вы должны сопоставить строчную форму токена (без пробелов).

Имея это в виду, вы можете сбросить все свои ключевые слова в одной строке BLOB-объекта на объекте Item безнеобходимо сопоставить его как отдельные ключевые слова, объединяя их в одну строку, разделенную пробелами.

...