Каков наилучший способ представления иерархии категорий с использованием префиксов терминов в 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/*)

Это может или не может быть "лучшим" решением, но оно может работать для некоторых приложений:)

Другие вопросы по тегам