Apache Solr: граненый поиск по многозначным полям - PullRequest
0 голосов
/ 28 марта 2012

В настоящее время я работаю над поисковым приложением на основе solr.

У меня есть два многозначных поля, например: Данные считываются из базы данных.

<int name="id">1</int>
<arr name="type">
<str>Marke</str>
<str>Modell</str>
<str>Fahrzeugtyp</str>
<str>engine</str>
</arr>
<arr name="value">
<str>Volkswagen</str>
<str>Golf</str>
<str>Golf TDI</str>
<str>V-Engine</str>

В моей текущей конфигурации solrнет никакой связи между этими двумя многозначными полями.Так что я могу сказать "Marke = Volkswagen".

Кроме того, между Volkswagen и Golf должны быть отношения.Поэтому я должен структурировать таксономию из двух многозначных полей и значений в самом многозначном поле.

Я попытался построить typeAhead.В моем текущем конфиге, когда я ищу Volkswagen - возможные предложения содержат audi и engine2, который не относится к модели Volkswagen.Solr URL:http://xyz:8983/solr/suggest?&wt=json&facet=true&q=*&facet.field=value&facet.prefix=VolkswagenЯ думаю, что Solr Faceting на нескольких объединенных полях как-то связан с этим, но я не могу отрегулировать его для своей проблемы.

Спасибо в ответ


Может быть, я могу использовать TemplateTransformer для объединения значения и типа?


С TemplateTransformer я получаю результат: Marke |Volkswagen

В моем data-import.xml (DIH)

<entity> name="tablename" transformer="TemplateTransformer">
<field column="test"  template="${tablename.TYPE} | tablename.VALUE}"/>
...
</entity>

1 Ответ

2 голосов
/ 25 июля 2014

Прошло много времени с тех пор, как я решил эту проблему.Попробуйте использовать этот скрипт в вашем обработчике ввода данных.Внимание - этот скрипт основан на Solr 3.6.

 <script>
       <![CDATA[ function f1(row) 
         {
          var eldName = row.get('TYPE');
          row.put(eldName, row.get('VALUE'));
          return row;
         }
       ]]>
 </script>

 <entity name="e" transformer="script:f1" query="select TYPE, VALUE from X"></entity>
...