solrj: как сохранить и получить список <POJO>через многозначное поле в индексе - PullRequest
6 голосов
/ 09 июля 2011

Мой вариант использования - это индекс, который содержит названия онлайн-медиа. Поставщик данных связывает список категорий с каждым заголовком. Я использую SolrJ для заполнения индекса с помощью аннотированного класса POJO

например.

@Field("title")
private String title;

@Field("categories")
private List<Category> categoryList;

Связанный POJO

public class Category {
    private Long id;
    private String name;
...

}

Мой вопрос состоит из двух частей:

a) возможно ли это через SolrJ - документы содержат только пример @Field с использованием List of String, поэтому я предполагаю, что сериализация / сортировка поддерживает только простые типы?

б) как бы мне настроить схему для этого? У меня есть наивное предположение, мне просто нужно установить multiValued = true в обязательном поле, и все будет работать по волшебству.

Я только начинаю реализовывать это, поэтому любой ответ будет высоко оценен.

1 Ответ

8 голосов
/ 09 июля 2011

Ответ, как вы и думали:

а) Доступны только простые типы. Таким образом, у вас будет список того же типа, например Строка. Дело в том, что вы не можете представлять сложные типы внутри документа lucene, поэтому вы также не сможете их десериализовать.

б) Проблема в том, что вы пытаетесь представить реляционное мышление в «хранилище документов». Это, вероятно, будет работать только до определенного момента. Если вы хотите представлять категории внутри документа lucene, просто используйте строку, поэтому не обязательно хранить идентификатор.

Единственное, что нужно для сохранения идентификатора, это: если вы хотите выполнить поиск в СУБД. Если вы хотите сделать это, вы должны убедиться, что идентификатор и название категории имеют мягкую связь. Это не работает для каждого отношения 1: n. (Возможно любое отношение 1: n, в котором таблица, связанная с n, состоит только из обязательных полей. Если у вас есть необязательное поле, вам необходимо поместить что-то вроде заполнения константы в поле, если возможно).

Однако, если эти отношения 1: n не редки, на самом деле это возможно, если вы поддерживаете порядок добавления полей в документ. Таким образом, случай с отношением категории может быть представлен, если вы не сортируете списки.

Вы можете реализовать метод, который возвращает эту категорию, если вы создаете ее экземпляр со значениями в позиции 0 ... n. Таким образом, решение было бы, если вы хотите иметь первую категорию, она будет в позиции 0 каждого списка, связанного с этой категорией.

...