2012-03-28 82 views
0

我目前正在开发基于solr的搜索应用程序。Apache 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 =大众”。

除了大众汽车和高尔夫之间还有一定的关系。所以我必须从两个多值字段和多值字段本身的值中构建一个分类。

我试图建立一个typeAhead。在我当前的配置中,当我搜索大众时 - 可能的建议包含audi和engine2,它不涉及大众汽车的模型。 Solr的网址:

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

我觉得Solr Faceting on Multiple Concatenated Fields事做吧,但我无法调整它在我的问题。

谢谢回复


也许我可以用TemplateTransformer结合的价值和类型?


With TemplateTransformer我得到一个结果:Marke |大众

在我的数据import.xml(DIH)

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

+0

对格式进行了一些更改,并更正了两个可能导致人们无法理解您的问题的语法问题。 – aitchnyu 2012-03-28 13:02:40

+2

真的不理解你的问题....请稍微详细点 – Yavar 2012-03-28 15:14:52

+0

http://stackoverflow.com/questions/9521304/solr-faceting-on-multiple-concatenated-fields帮助你? – jpountz 2012-03-28 15:44:54

回答

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> 
+0

添加动态字段并使用变压器。真棒! – nish 2014-07-26 11:42:15