поиск кросс-полей DIH, индексированных данных по Solr - PullRequest
0 голосов
/ 27 января 2012

Я получил индексированные данные из базы данных MySQL в моем движке Solr. Он отлично работает, когда я ищу ключевые слова вместе с именами полей: «q = texted_value: car» возвращает мою запись в БД

<doc><str name="id">6</str><str name="texted_value">car</str></doc>

Однако мне нужно иметь возможность выполнять полнотекстовый поиск в моей базе данных без указания имени поля (q = car). Так как мы это сделаем? Если он включает в себя Transformer или Processor в моей конфигурации данных, не могли бы вы мне помочь?

my data-config.xml:

<entity name="test0" 
pk="id"
query="select * from test0">
<field column="value_t" name="texted_value" />
</entity>

Thx

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Обычный метод поиска по полям в Solr - использование директивы copyField.Это копирует значения из исходного поля в поле назначения.Обычно оно индексируется без норм и не сохраняется.

<copyField source="columnA" dest="textAll" maxChars="20" />
<copyField source="columnB" dest="textAll" maxChars="20" />
<copyField source="columnC" dest="textAll" maxChars="20" />
....

Сделать поле textAll полем по умолчанию в вашем schema.xml,

<defaultSearchField>textAll</defaultSearchField>

Теперь вы можете искать http://server/solr/select/?q=car это будет искать по всем вашим полям.Это повысит производительность вашего поиска, вместо того, чтобы искать каждое поле отдельно, вы ищете одно поле textAll.Это идет с ценой увеличения времени индексации и размера файла.

Чтение Solr copyFields

0 голосов
/ 28 января 2012

Вы можете указать доступные для поиска столбцы с помощью DisMax Query Parser . copyField также будет работать, но требует изменения схемы. Оба хороших варианта в зависимости от ситуации.

**? Q = car & qf = column1 column2 & defType = dismax

    //search for the word "car"
    ?q=car

    //specify all the columns to search in
    &qf=column1 column2

    //use dismax
    &defType=dismax
...