У меня есть более 30 таблиц в моей базе данных MySQL. Недавно я импортировал данные из моей 1 таблицы в Solr 5.1.0 с использованием DataImporthandler и в моем Данные-config.xml файл, пожарный запрос,
select * from table-name
Но в моем поиске мне нужно объединить более 10 таблиц, чтобы получить правильный результат поиска.
Способы сделать это
1) Чтобы импортировать данные с помощью ПРИСОЕДИНИТЬСЯ запросить в базе данных MySQL и импортировать его
ИЛИ ЖЕ
2) ПРИСОЕДИНИТЬСЯ Решите ядра, импортируя полные данные отдельных таблиц.
Что я должен сделать, чтобы это оптимизировать ?? и какой хороший способ?
Чтобы импортировать данные, используя запрос 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
Но также учитывайте ограничения этого.
Поля или другие свойства документов, к которым присоединяются «из», недоступны для использования при обработке результирующего набора «в» документов
(то есть: вы не можете вернуть поля в документах «из», как если бы они были многозначными полями в документах «в»).
Таким образом, вы можете рассмотреть эти моменты, прежде чем принять окончательный звонок.
Рассмотрим здесь у вас есть два ядра
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"}
В среде DistributedSearch нельзя объединять ядра на нескольких узлах.
Однако, если у вас есть индивидуальный подход к разделению, вы можете объединить несколько ядер на одном узле.
Запрос на соединение дает постоянные оценки для всех документов, которые соответствуют —
баллы, вычисленные по вложенному запросу для документов «от», недоступны для оценки документов «до».
Учитывая вышеизложенное, я надеюсь, что вы сможете решить, какой подход вы хотите использовать.
Если у вас одно ядро, я бы порекомендовал импортировать таблицы в одно ядро и использовать соединения. Это то, что я сделал на моем 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 -->