Обработка нескольких таблиц MySQL с помощью Solr 5.1.0?

У меня есть более 30 таблиц в моей базе данных MySQL. Недавно я импортировал данные из моей 1 таблицы в Solr 5.1.0 с использованием DataImporthandler и в моем Данные-config.xml файл, пожарный запрос,

select * from table-name

Но в моем поиске мне нужно объединить более 10 таблиц, чтобы получить правильный результат поиска.

Способы сделать это

1) Чтобы импортировать данные с помощью ПРИСОЕДИНИТЬСЯ запросить в базе данных MySQL и импортировать его

ИЛИ ЖЕ

2) ПРИСОЕДИНИТЬСЯ Решите ядра, импортируя полные данные отдельных таблиц.

Что я должен сделать, чтобы это оптимизировать ?? и какой хороший способ?

0

Решение

  1. Чтобы импортировать данные, используя запрос JOIN в базе данных MySQL и импортировать их

    Да, это возможно в Solr с использованием DIH.
    С DIH, как вы должны настроить свой data-config.xml.
    Здесь вы можете написать запрос, используя соединения, которые будут
    получить данные из всех желаемых таблиц. Здесь вы можете создать одно ядро ​​и иметь все данные в одном ядре.
    Вы можете создать свой документ, используя эти поля. (Поля документов будут упомянуты в schema.xml).

    Точки, которые следует учитывать при оптимизации, — это то, по каким полям вы хотите искать и хотите показать в результате.
    Так что сначала нужно разобраться с этим. По каким полям вы будете искать и нужно отобразить.

    Поля, по которым вам нужно выполнить поиск, обозначают их как indexed = «true». Остальные все делают как indexed = «false».
    Поля, которые вам нужны в результате, помечают их как сохраненные = «истина». Остальные все делают как сохраненные = «ложь».

    Некоторым может потребоваться и то и другое, например, поиск и показ в результате. Отметьте их как indexed = «true» и сохраненные = «true».

    например, в моем документе было 15 полей, но только 4 проиндексированы, так как я хочу искать только по этим полям.
    а остальные все поля показываются в результате, поэтому там хранятся.

    Теперь перейдем ко второму вопросу

    ПРИСОЕДИНЯЙТЕСЬ к решениям ядер, импортируя полные данные отдельных таблиц
    Да, это возможно в Solr начиная с Solr 4.0

    для подробного примера проверьте ссылку ниже
    https://wiki.apache.org/solr/Join

    Но также учитывайте ограничения этого.

  2. Поля или другие свойства документов, к которым присоединяются «из», недоступны для использования при обработке результирующего набора «в» документов
    (то есть: вы не можете вернуть поля в документах «из», как если бы они были многозначными полями в документах «в»).

    Таким образом, вы можете рассмотреть эти моменты, прежде чем принять окончательный звонок.

Рассмотрим здесь у вас есть два ядра

core brands with fields {id,name}
core products with fields{id, name, brand_id}

data in core BRANDS: {1, Apple}, {2, Samsung}, {3, HTC}

data in core PRODUCTS: {1, iPhone, 1}, {2, iPad, 1}, {3, Galaxy S3, 2}, {4, Galaxy Note, 2}, {5, One X, 3}

вы бы построили свой запрос как:

http://example.com:8999/solr/brands/select?q=*:*&fq={!join from=brand_id to=id fromIndex=products}name:iPad

and the Result will be: {id: "1", name:"Apple"}
  1. В среде DistributedSearch нельзя объединять ядра на нескольких узлах.
    Однако, если у вас есть индивидуальный подход к разделению, вы можете объединить несколько ядер на одном узле.

  2. Запрос на соединение дает постоянные оценки для всех документов, которые соответствуют —
    баллы, вычисленные по вложенному запросу для документов «от», недоступны для оценки документов «до».

    Учитывая вышеизложенное, я надеюсь, что вы сможете решить, какой подход вы хотите использовать.

0

Другие решения

Если у вас одно ядро, я бы порекомендовал импортировать таблицы в одно ядро ​​и использовать соединения. Это то, что я сделал на моем solr 4.9 с помощью торт php и solrphpclient.
Но для этого вам нужно будет определить структуру таблицы и типы данных в data-config.xml и schema.xml.Which я предполагаю, что вы, должно быть, сделали.
В вашем файле data-config вы пишете запросы или определяете структуру, которая будет импортировать все данные из ваших десяти таблиц соответственно

Смотрите мой пример для двух таблиц

 <entity name="type_masters" pk="type_id" query="SELECT delete_status as
type_masters_delete_status,type_updated,type_id,category_id,type_name FROM
type_masters
where type_id='${businessmasters.Business_Type}'"deltaQuery="select type_id from type_masters where type_updated >
'${dih.last_index_time}'"parentDeltaQuery="select business_id from businessmasters where
Business_Type=${type_masters.type_id}">
<field column="type_id" name="id"/>
<field column="category_id" name="category_id" indexed="true" stored="true"/>
<field column="type_name" name="type_name" indexed="true" stored="true" />

<field column="type_updated" name="type_updated" indexed="true"stored="true" />
<field column="type_masters_delete_status" name="type_masters_delete_status"indexed="true" stored="true" />


<entity name="category_masters" query="SELECT delete_status as
category_masters_delete_status,category_updated,category_id,category_name
FROM category_masters where category_id='${type_masters.category_id}'"
deltaQuery="select category_id from category_masters where category_updated > '${dih.last_index_time}'"
parentDeltaQuery="select type_id from type_masters where
category_id=${category_masters.category_id}">

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

<field column="category_name" name="category_name" indexed="true"stored="true" />
<field column="category_updated" name="category_updated" indexed="true"stored="true" />
<field column="category_masters_delete_status"name="category_masters_delete_status" indexed="true" stored="true" />
</entity><!-- category_masters -->

</entity><!-- type_masters -->
0

По вопросам рекламы [email protected]