Solr不会搜索属于嵌套实体的字段

时间:2013-01-21 14:23:24

标签: search tomcat solr lucene dataimporthandler

我正在使用apache solr来搜索网站。 我使用嵌套实体从不同的表导入数据。 Dataimport是成功的,所有文档都被添加到索引中。我的dataConfig是这样的:

<dataConfig>
  <dataSource type="JdbcDataSource" driver ="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/purplle_purplle2" user="purplle_purplle" password="purplle123" />

  <document name="doc">
     <entity name="offer" query="SELECT * FROM service_offering WHERE module LIKE 'location' ">

       <field column="name" name="name"/>
       <field column="id" name="id" />
       <field column="type_id" name="type_id" />

       <entity name="offer_type" query=" select name from service_offeringtype where id='${offer.type_id}'" >
          <field column="name" name="offer_type" />
       </entity>

       <entity name="offer_location" query=" select name from service_location where id='${offer.module_id}'" >
          <field column="name" name="location_name" />
       </entity>

       <entity name="offer_address" query=" select * from service_address where module_id='${offer.module_id}' AND module LIKE 'location'" >

          <entity name="loc_city" query=" select name from loc_city where id='${offer_address.city}'" >
            <field column="name" name="loc_city" />
          </entity>

          <entity name="loc_area" query=" select name from loc_area where id='${offer_address.area}'" >
            <field column="name" name="loc_area" />
          </entity>

          <entity name="loc_zone" query=" select name from loc_zone where id='${offer_address.zone}'" >
            <field column="name" name="loc_zone" />
          </entity>

       </entity>

    </entity>

  </document>

</dataConfig>

现在如果我直接搜索这个索引。仅为“名称”字段提取结果。它为其他字段返回null,即“loc_area”,“location_name”,“loc_city”等。 我的架构看起来像这样

<field name="id"  type="int" indexed="true" stored="true" /> 
<field name="name"  type="string" indexed="true" stored="true" />  
<field name="offer_type"  type="string" indexed="true" stored="true" />
<field name="location_name"  type="string" indexed="true" stored="true" />
<field name="type_id"  type="string" indexed="true" stored="true" />     
<field name="loc_city"  type="string" indexed="true" stored="true" /> 
<field name="loc_area"  type="string" indexed="true" stored="true" /> 
<field name="loc_zone"  type="string" indexed="true" stored="true" /> 

但是,如果我将这些字段复制到schema.xml中默认存在的“text”字段中。然后通过搜索“文本”字段,我很容易得到相关的结果。

<copyField source="name" dest="text"/>
<copyField source="offer_type" dest="text"/>
<copyField source="location_name" dest="text"/>
<copyField source="loc_city" dest="text"/>
<copyField source="loc_area" dest="text"/>
<copyField source="loc_zone" dest="text"/>

但我不能这样做,因为我必须将提升等级分配到不同的字段以计算得分。我在查询语法“&amp; defType = edismax&amp; qf = name ^ 1.0 + location_name ^ 10.0 + loc_area ^ 50.0”中附加它的那一刻它返回null结果。

有什么问题?

1 个答案:

答案 0 :(得分:1)

我的猜测是你的问题是你的领域的类型。我不确切知道您的字段包含哪些内容,但type="string"type = "text"之间存在差异。

String类型索引整个字段输入的未加标记的String值。文本类型标记并分析该字段。例如,如果我针对包含“John Smith”的字符串字段搜索“john”,我就不会指望点击,如果该字段是文本字段,我会受到影响。

由于您的查询似乎对文本字段起作用,而不是字符串字段,因此更改类型和重新索引似乎是一种可能的解决方案。