Вложенные поля SOLR дают беспорядочный результат - PullRequest
0 голосов
/ 10 июля 2020

У меня проблема с SOLR. Основная мотивация сделать то, что я опишу позже, заключалась в том, чтобы удалить нагрузку из базы данных в SOLR. Мы говорим о интернет-магазине, в котором хранятся тонны продуктов, и где статистические c данные (иногда вычисляемые с помощью довольно «дорогих» SQL запросов) должны храниться в SOLR.

Версия SOLR: 8.2

На самом деле это не проблема с общими полями, такими как название продукта, код продукта и c .. Проблемы начались, когда я хотел перенести 1: N отношения (например product_tag - вы можете представить что-то вроде NEW, PRETTY COOL, ... - где я хочу сохранить некоторые поля - id, имя тега и некоторые логические значения)

<entity name="product_tag"
    child="true"
    query="SELECT l.id, l.text as tag, l.eshop_relevant, sipt.stock_item_id as stock_item_id FROM product_tag l join stock_item_product_tag sipt on sipt.product_tag_id = l.id"
    cacheImpl="SortedMapBackedCache"
    where="stock_item_id=stock_item.id">
<field name="id" column="id" />
<field name="text" column="tag" />
<field name="eshop_relevant" column="eshop_relevant" />

Ядро, которое я хочу для расширения выглядит так (некоторые поля были удалены для простоты)

<?xml version="1.0" encoding="UTF-8" ?>

<schema name="xxx" version="1.6">

    <xi:include href="common-types.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>

    <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="id" type="long" indexed="true" stored="true" />
    <field name="code" type="string" indexed="true" stored="true" required="true"/>

    <uniqueKey>code</uniqueKey>
</schema>

Как видите, главное - это код. Типичное использование - некоторый BE Spring API будет вызывать клиента SOLR с запросом продуктов с кодами 1,2,3,4,5, и SOLR должен предоставить ему все документы, соответствующие данным кодам.

Я попытался улучшить документ с этими полями

<field name="_root_" type="string" indexed="true" stored="false" docValues="false" multiValued="true" />
<field name="product_tag_id" type="long" indexed="true" stored="true" />
<field name="product_tag_name" type="string" indexed="false" stored="true" />
<field name="eshop_relevant" type="boolean" indexed="false" stored="true" />

Чтобы охватить отношение 1: N с тегом продукта (чтобы продукт содержал «массив» тегов продукта, каждый из которых содержит свой идентификатор, назовите логическое значение eshop_relevant).

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

«первый» продукт имеет

  • product_tag.product_tag_id: «22» (его строка и никакое другое поле, связанное с тегом продукта)

у «второго» продукта

  • product_tag_name: "НЕКОТОРЫЕ ИМЯ"

  • eshop_relevant: true

  • product_tag_id: 22 * ​​1048 *

Я пробовал много возможностей, гуглил целую вечность (даже пробовал все потоки SO, соответствующие вложенным объектам на SOLR), пробовал какую-то онлайн-книгу о solr, и ничего не произошло.

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