Apache Solr:多值字段上的分面搜索

时间:2012-03-28 10:31:41

标签: map solr faceted-search multivalue

我目前正致力于基于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”。

除此之外,大众汽车与高尔夫之间必然存在关系。所以我必须从两个多值字段和多值字段本身的值中构建一个分类。

我尝试构建一个typeAhead。在我目前的配置中,当我搜索大众汽车时 - 可能的建议包含奥迪和引擎2,而不是大众汽车的型号。 solr url:

http://xyz:8983/solr/suggest?&wt=json&facet=true&q= *&安培; facet.field =值安培; facet.prefix =大众

我认为Solr Faceting on Multiple Concatenated Fields与它有关,但我无法根据我的问题进行调整。

谢谢回复


也许我可以使用TemplateTransformer来组合值和类型?


使用TemplateTransformer,我得到一个结果:Marke |大众

在我的data-import.xml(DIH)

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

1 个答案:

答案 0 :(得分:2)

自从我解决了这个问题已经很久了。尝试在数据输入处理程序中使用此脚本。注意 - 此脚本基于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>