Каков наилучший способ представления иерархии категорий с использованием префиксов терминов в Xapian?
Предположим, у меня есть следующий пример иерархии:
- НАС
- Мичиган
- Детройт
- Великие пороги
- Lansing
- Миннесота
- Великие пороги
- Миннеаполис
- Св. Павел
- Огайо
- Колумбус
- Великие пороги
- Sandusky
- Мичиган
Я вижу два способа индексирования документа "Гранд-Рапидс, Мичиган" с префиксными терминами:
XFIRSTLEVELus
XSECONDLEVELmichigan
XTHIRDLEVELgrandrapids
или же
XFIRSTLEVELus
XSECONDLEVELus_michigan
XTHIRDLEVELus_michigan_grandrapids
Я склонен использовать второй подход, полагая, что он даст более интуитивные результаты. То есть, поиск, который включает в себя критерии поиска Гранд-Рапидс, Мичиган, с меньшей вероятностью будет включать документы из Миннесоты и Огайо.
Однако два аспекта этого подхода меня беспокоят. Во-первых, создание и поддержка префиксов терминов для каждого уровня иерархии кажется неправильным. Во-вторых, объединение значений кажется суррогатом для использования весов.
Итак, как лучше всего представить иерархию с префиксами терминов?
1 ответ
Как и во всех этих случаях, возможно, лучше подумать о том, как вы хотите использовать данные, а не о том, каков "лучший" способ их хранения.
В прошлом я сохранял данные о местоположении, как вы описываете, как если бы они были путями URL, преобразуя название места в слаг, поэтому ваш приведенный выше пример будет выглядеть примерно так:
us
us/michigan
us/michigan/detroit
us/michigan/grand-rapids
us/michigan/lansing
us/minnesota
us/minnesota/grand-rapids
us/minnesota/minneapolis
us/minnesota/st-paul
us/ohio
us/ohio/columbus
us/ohio/grand-rapids
us/ohio/sandusky
Дайте каждому документу префиксный термин с одним из этих путей и используйте точный поиск по термину, чтобы получить все документы только в одном месте (location:us/minnesota/minneapolis
) или поиск по шаблону, чтобы получить все дочерние элементы местоположения (location:us/minnesota/*
)
Это может или не может быть "лучшим" решением, но оно может работать для некоторых приложений:)