Solr индексация связанных таблиц - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть экземпляр solr с DataImportHandler, указывающим на мою базу данных, в которой есть несколько таблиц, которые сопоставляются с json как ...

[ 
  { 
    "id": 1,
    "name": "Soap",
    "price": "2.00",
    "description": "It cleans things"
    "category_list: [
      {
        "id":1,
        "location": "store",
        "name": "cleaner"
      }, {
        "id": 2,
        "location": "online",
        "name": "home"
      }
   ]
}

В основном есть продукты, которые находятся в категориях.

Я указал на это индексатор, но когда я делаю запросы для продуктов, я получаю результаты, в которых «категории» разбиваются на отдельные списки

{
  name: ["cleaner", "home"]
  location: ["store", "online"]
  id: [1, 2]
}

Он инвертирует отношения и теряет контекст. Если бы я хотел спросить его, где находится категория «магазин», а название «дом», он найдет ВСЕ, что имеет ЛЮБОЙ инвентарь в магазине, и ЛЮБУЮ категорию «дом». У него нет контекста, чтобы собрать его вместе в одном и том же подобъекте.

Есть ли способ указать solr правильно проиндексировать, сохранить и получить их? Я могу передать ему таблицы или json или что-то еще, но я хочу вернуть его в исходную форму и запросить его в исходной форме.

Так что data-config. xml похожа на this

<dataConfig>
  <dataSource  type="JdbcDataSource" driver="org.postgresql.Driver" url="jdbc:postgresql://pghostname:5432/db" user="user" password="pass" />
  <document >
    <entity name="products"
            pk="id"
            query="SELECT * from products">

      <field column="id" name="id"/>
      <field column="name" name="name"/>
      <field column="price" name="price"/>
      <field column="description" name="description"/>

      <entity name="product_categories"
            pk="category_id"
            query="SELECT * from product_categories where product_id = ${product.id}">

    <field column="category_id" name="category_id"/>
        <field column="location" name="location"/>
        <field column="name" name="name"/>

      </entity>

    </entity>

  </document>
</dataConfig>

А вот несколько примеров данных для postgres базы данных

create table products (
  id integer generated by default as identity,
  name varchar,
  price varchar,
  description varchar,
  primary key(id)
);

create table product_categories (
  category_id integer generated by default as identity,
  name varchar,
  location varchar,
  product_id integer,
  foreign key (product_id) references products(id),
  primary key(category_id)
);

insert into products
(name, price, description)
values
('Soap', '2.13', 'this is soap'),
('Pencils', '0.89', 'pencils write things'),
('Scissors', '5.00', 'scissors sciss');

insert into product_categories
(name, location, product_id)
values
('home', 'in-store', 1),
('office', 'online', 2),
('office', 'in-store', 3),
('home', 'in-store', 2);

Вы можете видеть, что существует одна связь. Но после импортирования этого и выполнения запроса мы видим результаты вроде ...

"response":{"numFound":3,"start":0,"docs":[
      {
        "price":"2.13",
        "name":"Soap",
        "description":"this is soap",
        "id":"1",
        "category_id":"1",
        "location":"in-store",
        "_version_":1658459282145804288},
...

, которые четко сведут две таблицы в один объект

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