Обработчик импорта данных Solr (DIH) не может индексировать все записи из представления MySQL

У меня есть представление в моей базе данных MySQL и создание POC индексации Solr с использованием DIH. В моем запросе прямого выбора есть 6 записей, но запрос Solr возвращает только 4 (хотя он говорит, что он получил 6 записей).

Представление MySql

CREATE VIEW FORUMS_SURVEYS AS
SELECT F.TITLE, F.DESCRIPTION, F.CREATED, FC.TYPE, FC.SUBTYPE FROM FORUM F JOIN FORUM_CATEGORY FC ON F.FORUM_CATEGORY_ID=FC.ID
UNION ALL
SELECT S.TITLE, S.DESCRIPTION, S.DATED AS CREATED, "" AS TYPE, "" AS SUBTYPE FROM SURVEY S; 

Выберите из представления

select * from FORUMS_SURVEYS;

Result - Fetched Rows: 6 (as expected)

Запустите DIH на Solr со следующим

db-data-config.xml

<dataConfig>
    <dataSource driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/bjm" user="<user>" password="<password>" />
    <document>
       <entity name="forums_surveys" query="SELECT * FROM forums_surveys" transformer="HTMLStripTransformer">
            <field column="TITLE" name="title" indexed="true" type="text" />
            <field column="DESCRIPTION" name="description" indexed="true" type="text" stripHTML="true"/>
            <field column="CREATED" name="created" indexed="true" type="text" />
            <field column="TYPE" name="type" indexed="true" type="text" />
            <field column="SUBTYPE" name="subtype" indexed="true" type="text" />
        </entity>
    </document>
</dataConfig>

В UI Admin, результат DataImport

Last Update: 16:13:12

(Duration: 01s)
Requests: 1 1/s, Fetched: 6 6/s, Skipped: 0 , Processed: 0 
Started: 42 minutes ago

Опять же, приятно видеть текст «Выбрано: 6».

Однако все становится неприятным, когда я запрашиваю результат у администратора пользовательского интерфейса с запросом Params q=title:* (обратите внимание на поле в JSON ниже ответа> numFound)

"responseHeader":{
    "status":0,
    "QTime":8,
    "params":{
      "q":"title:*",
      "_":"1587565922553"}},
  "response":{"numFound":4,"start":0,"docs":[
//removed the 4 records for brevity
]

person Singam    schedule 22.04.2020    source источник
comment
ЧТО такое уникальный идентификатор в вашем случае?... что вы настроили в schema.xml? необходимо иметь уникальное поле для ваших документов.   -  person Abhijit Bashetti    schedule 22.04.2020
comment
Я не вижу ни одного поля в поле выбора в качестве поля идентификатора или поля, которое определяет уникальность строки   -  person Abhijit Bashetti    schedule 22.04.2020
comment
Вы нашли поле id и разрешили это?   -  person Abhijit Bashetti    schedule 23.04.2020
comment
@AbhijitBashetti. Спасибо за ваши комментарии. Мне нужно выяснить, как определить поле идентификатора записей из представления, я попробую пару идей, которые у меня есть, и после этого обновлю сообщение.   -  person Singam    schedule 26.04.2020
comment
Да, пожалуйста... проблема, похоже, в уникальном идентификаторе   -  person Abhijit Bashetti    schedule 26.04.2020
comment
@AbhijitBashetti. Огромное спасибо. Кажется, это работает. Идентификатор в представлении является объединением двух полей и, следовательно, строкой. Не знаю, какой будет КПД. Но увидим, когда я перейду мост - когда у меня будет большой объем Данных.   -  person Singam    schedule 26.04.2020


Ответы (1)


Вам нужно иметь уникальное поле, которое может быть id. Уникальное поле необходимо для обеспечения уникальности документов solr.

Элемент uniqueKey указывает, какое поле является уникальным идентификатором для документов. Хотя uniqueKey не требуется, он почти всегда гарантируется дизайном вашего приложения.

Например, uniqueKey следует использовать, если вы когда-либо будете обновлять документ в индексе.

Вы можете определить поле уникального ключа, назвав его:

<uniqueKey>id</uniqueKey>
person Abhijit Bashetti    schedule 28.04.2020