Можно ли получить соответствующий документ и всех его предков в одном запросе? - PullRequest
1 голос
/ 08 сентября 2010

Чтобы проиллюстрировать мои требования, рассмотрим следующую структуру каталогов:

C: \ Dev
C: \ Dev \ Projects
C: \ Dev \ Projects \ Test Project
C: \Dev \ Projects \ Test Project \ Test.cs
C: \ Dev \ Projects \ Foo
C: \ Dev \ Projects \ Foo \ foo.cs (содержащий слово test)

БазовыйУ документа будут поля id, type, name и content, где типом будет файл или папка, а name будет имя файла или имя эфира.

При поиске «test» я должен получить:

C: \ Dev (предок результата)
C: \ Dev \ Projects (предок результата)
C: \ Dev \ Projects \ Тестовый проект (результат)
C: \ Dev (предок результата)
C: \ Dev \ Projects (предок результата)
C: \ Dev \ Projects \Тестовый проект (предок результата)
C: \ Dev \ Projects \ Тестовый проект \ Test.cs (результат)
C: \ Dev (предок результата)
C: \ Dev \ Projects (предок результата)
C: \ Dev \ Projects \ Foo (предок результата)
C: \ Dev \ Projects \ Foo \ foo.cs (результат)

Еще лучше, если онможно избежать дублирования:

C: \ Dev (предок результата)
C: \ Dev \ Projects (предок результата)
C: \ Dev \ Projects \ Test Project (результат)
C: \ Dev \ Projects \ Test Project \ Test.cs (результат)
C: \ Dev \ Projects \ Foo (предок результата)
C: \ Dev \ Projects \ Foo \ foo.cs (результат)

При поиске «проекта» я должен получить:

C: \ Dev (предок результата)
C: \ Dev \ Projects (предок результата)
C: \ Dev \ Projects \ Test Project (результат)

При поиске "foo" я должен получить:

C: \ Dev (предок)результата)
C: \ Dev \ Projects (предок результата)
C: \ Dev \ Projects \ Foo (результат) C: \ Dev \ Projects \ Foo \ foo.cs (результат)

Спасибо за любую помощь

1 Ответ

0 голосов
/ 10 сентября 2010

Если вы сгенерируете свой индекс один раз или у вас очень мало записей, вы можете настроить решение для индексации документов.

Таким образом, для каждого документа вы должны сохранить другое поле с именем «путь» ипусть он содержит список всех слов из подэлементов пути:

name: C: \ Dev \ Projectsпуть: C :, Dev, Projects, Test, Test Project, Test.cs, Foo, Foo.cs (используйте любой токенизатор, который вы хотите)

, затем индексируйте поле как INDEXED: true STORED: false и используйте егодля поиска совпадений:

query: + path: "Foo"

Должен возвращать все документы, в которых Foo является дочерним элементом.Имейте в виду, что это решение очень дорого для записей и может быть непрактичным для очень большой древовидной структуры, где у вас много тысяч листов.

...