Индексирование вложенных документов в Solr - PullRequest
2 голосов
/ 03 апреля 2012

Я видел, что Solr позволит вам индексировать JSON: http://wiki.apache.org/solr/UpdateJSON

Однако ни один из примеров не является вложенным. Можете ли вы индексировать что-то вроде этого, а если нет, то как это обычно обрабатывается?

{
  name: 'ben',
  state: 'california',
  country: 'united states',
  companies: [
    {
      name: 'google',
      title: 'software engineer',
    },
    {
      name: 'sherwin-williams',
      title: 'web developer'
    }
  ],
}

Ответы [ 3 ]

1 голос
/ 28 августа 2014

У меня была такая же проблема. Мы хотели проиндексировать в solr сложные документы json с массивами и картами (гораздо сложнее, чем в примере, который вы опубликовали).

В конце я изменил класс JsonLoader для принятия такого рода документов. Что он делает, он выравнивает структуру json, позволяет индексировать поля и сохраняет исходную структуру json [company]. Наконец, он поддерживает глубокое вложение

Вы можете найти исходный код с некоторыми пояснениями на

http://www.solrfromscratch.com/2014/08/20/embedded-documents-in-solr/

В вашем примере он будет хранить / индексировать [в зависимости от того, как вы настраиваете поля] следующую структуру

name: 'ben',
state: 'california',
country: 'united states',
companies.0.name: 'google',
companies.0.title: 'software engineer',
companies.1.name: 'sherwin-williams',
companies.1.title: 'web developer'
companies_json:[
    {
      name: 'google',
      title: 'software engineer',
    },
    {
      name: 'sherwin-williams',
      title: 'web developer'
    }
  ]    

М.

1 голос
/ 03 апреля 2012

Есть несколько способов пойти. Строка json может храниться в явном виде, а сериализация обрабатывается на прикладном уровне. Elasticsearch использует этот подход прозрачно.

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

companies.name: ['google', 'sherwin-williams']
companies.title: ['software engineer', 'web developer']

Обратите внимание, в таком случае запрос, как

<BooleanQuery: +companies.name:google +companies:web developer>

будет соответствовать. Если позиция имеет значение, необходимо использовать более продвинутый SpanQuery.

0 голосов
/ 14 мая 2015

Вложенные Jsons могут быть проиндексированы с помощью дочерних документов в solr. Мы можем использовать Блокировать и объединять парсеры запросов , чтобы запросить его.

См. этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...