Новичок в Lucene.net, лучший подход к сложным запросам? - PullRequest
0 голосов
/ 20 июля 2009

Я создаю веб-сайт для изучения целей и смотрю на lucene.net в качестве полнотекстового индексатора для моего контента, но у меня есть несколько вопросов.

Допустим, у меня есть иерархия (n уровней) категорий и статей, которые относятся к одной категории (1 категория -> n статей). Используя простой RDB, было бы очень легко найти статью в категории или любой из ее подкатегорий. Но я изо всех сил представьте, как я построил бы такой запрос, используя lucene. Опции, которые я думаю, могут работать:

Предполагая, что я использую "заголовок, текст, категорию" для каждой статьи, можно было бы сначала получить список с идентификаторами каждой подкатегории. из БД, а затем поиск в Lucene с этим списком.

Другой вариант - индексировать всю категорию «путь» статьи внутри поля в lucene. Что-то вроде "title", "text", "catparent1, catparent2, catparent3, category"?

Какой наилучший подход при выполнении запросов такого типа со сложными реляционными фильтрами? (не только текстовый поиск)

1 Ответ

4 голосов
/ 20 июля 2009

Добавьте путь к категории в качестве индексированного поля и используйте поиск по фразе для его поиска:

ID        Title              Categories

"MyDoc1", "Hello world!",    "/programming/beginner/samples"
"MyDoc2", "Prove that P=NP", "/programming/advanced/samples"

Теперь вы можете запрашивать категории либо иерархически, используя поиск по фразе:

"/programming/beginner"

или не иерархически с использованием поиска по слову:

"samples"

Я использую этот метод для индексации файлов с их именами путей - вы можете запросить "dirname" или "parent/child" или "/root/parent/child", и все это прекрасно работает.

Вы можете контролировать, начинается ли поиск с корня, включив или исключив начальную косую черту.

В терминах «сложных реляционных фильтров» вы можете комбинировать эти поиски по категориям с другими поисками и фильтрами, используя логические запросы.

...