вы должны позаботиться о том, чтобы разные типы объектов в одном индексе
Если вы ищете «id: 1», как вы знаете, если вы получили тире или активность?
Или:
- убедитесь, что имена полей уникальны, т.е. «dash_id», «activity_id»
- добавьте поле «_type» и добавьте «_type: dash» или «_type: activity» в качестве фильтра для поиска
вы не можете выполнить свое «соединение» в одном запросе, по крайней мере, с текущим Lucene.net (3.0.3)
Lucene - это хранилище документов, это несколько способов хранения хранилища ключей. Каждый документ - «просто куча полей».
Вы можете просто запросить для каждого объекта, а затем использовать Linq для объединения двух коллекций. Но это может быть довольно неэффективным и интенсивным в памяти. Все зависит от того, сколько результатов вы ожидаете. Если число мало, это, вероятно, самое простое.
Однако вы можете сделать что-то достаточно приличное с двумя запросами и «синхронизированным перечислимым». Caveat: Трудно сказать, что такое «Dash», но глядя на свойства, которые я собираюсь предположить, что для каждой операции есть много Dash
Псевдокод
Store.YES
Это было просто списано с моей головы, поэтому извиняюсь, если это не совсем правильно :)
Идея состоит в том, чтобы предвидеть действия, а затем перевести счетчик штриховки вперед, чтобы поддерживать синхронизацию с активностью. Предполагается, что вы сохраняете значения свойств в id
полях. Этот подход просто получает id
поля, пока мы не найдем совпадение, а затем проецируем весь объект.
Другой вариант
заключается в том, чтобы рассматривать Lucene как «хранилище документов». Создайте класс, который моделирует parent-child. Итак, у Activity есть свойство, которое представляет собой набор Dash.
Сериализуйте этот объект в двоичное поле. Добавьте соответствующие поля для поиска Store.No
. Это означает, что соединение не требуется, вы получаете весь объект за один удар.
Это работает, если частота обновления низкая, так как вам нужно обновить весь объект, а не просто добавить одну Dash и полагаться на соединение.
Удачи :)