Как проиндексировать и выполнить поиск в двух разных таблицах, которые находятся в одном и том же источнике данных, используя один экземпляр solr (два разных поля поиска не объединяются) - PullRequest
3 голосов
/ 12 апреля 2011

Я новичок в Solr. У меня есть пара вопросов по solr Индексация и поиск:

  1. Могу ли я настроить индексирование двух таблиц (нет взаимосвязей 1. книги и 2. компьютеры, и оба находятся в одном источнике данных), если я хочу иметь два поля поиска. Можно ли сделать что-то вроде определения двух сущностей в одном data-config.xml

Если да, пожалуйста, дайте мне знать шаги.

Я думаю, мы можем использовать два разных файла data-config.xml. Но нужно знать, как настроить файл schema.xml и внести соответствующие изменения.

  1. Как настроить solr для индексации как файлов PDF, так и Mysql на одном экземпляре solr.

Пожалуйста, помогите мне и сообщите, если есть какие-либо справочные документы.

Ответы [ 2 ]

5 голосов
/ 11 марта 2012

2 разных таблицы не имеют отношения

data-config.xml:

    <document>
        <entity name="topic" transformer="TemplateTransformer" pk="topic_id" query="select topic_id,topic_title,creation_date,updation_date,vote_count,.....">
            <field column=" doc_id " template="TOPIC_${topic.topic_id} " />
            <field column="doc_type " template="TOPIC " />

        </entity>

        <entity name="product " transformer="TemplateTransformer " pk="product_id " query="SELECT product_id,..... ">
            <field column="doc_id " template="PRODUCT_${product.product_id} " />
            <field column="doc_type " template="PRODUCT " />
            <field column="product_supplier_id " name="product_supplier_id " />
            <field column="supplier_product_code " name="supplier_product_code " />
            <field column="product_display_name " name="product_display_name " />
        </entity>
    </document>

schema.xml:

    <schema>
        . . .
        <fields>

            <field name="doc_id" type="string" />
            <field name="doc_type" type="string" />

            <field name="catchall" type="string" stored="false" omitNorms="true" multiValued="true" />


            <field name="topic_title" type="text_general" />. . . .
        </fields>

        <uniqueKey>doc_id</uniqueKey>
        <copyField source="*" dest="catchall" />

        <!-- field for the QueryParser to use when an explicit fieldname is absent -->
        <defaultSearchField>catchall</defaultSearchField>
    </schema>

больше информации - http://www.lucidimagination.com/blog/2011/02/12/solr-powered-isfdb-part-4/

поле выше не требуется или может создать проблему при индексации

, который вы можете запросить в браузере как http://localhost:8080/solr/select/?q=*:*&fq=doc_type:PRODUCT

0 голосов
/ 18 апреля 2011

Вы можете легко сделать это с помощью Solr, просто внимательно прочитайте в DataImportHandler: http://wiki.apache.org/solr/DataImportHandler и к этому примеру: http://wiki.apache.org/solr/MultipleIndexes

Тогда попробуйте поискать конкретные примеры сущностей. По сути, ваш data-config.xml должен выглядеть примерно так (не проверено):

<entity name="books" transformer="TemplateTransformer" dataSource="myindex"
        query="SELECT * FROM t_books";>
<field column="category" template="books" name="category"/></entity>
<entity name="computers" 
            dataSource="myindex"
        query="SELECT * FROM t_computers">
  <field column="category" template="computers" name="category"/></entity>  

Используйте шаблон для разделения двух сущностей и определения поля категории в виде строки в вашем schema.xml. Также убедитесь, что вы обратили внимание на то, как вы устанавливаете параметр уникального идентификатора, некоторая информация для этой конкретной темы находится здесь: http://lucene.472066.n3.nabble.com/Indexing-multiple-entities-td504464.html а также проверьте здесь: http://search.lucidimagination.com/search/document/f84c3abf7e859be1/dataimporthanlder_multiple_entities_will_step_into_each_other

При таком подходе у вас есть два набора данных в одном и том же индексе. Если вы хотите, чтобы они работали для двух отдельных окон поиска, вы можете просто выполнить поиск следующим образом:

myquery AND категория: (книги) <--- это только даст вам результаты из книг, или этот другой даст вам только результаты компьютеров ---> myquery AND категория: (компьютеры). Надеюсь, поможет. И что касается ваших вопросов в формате pdf, я полагаю, что вы должны использовать модуль Apache Tika, здесь я не очень помогу, поскольку сам не использовал его, но вот ссылка: http://wiki.apache.org/solr/TikaEntityProcessor

...