solr实体嵌套、字段加权查询

来源:互联网 发布:android开发计算器源码 编辑:程序博客网 时间:2024/05/20 20:44
创建索引时可能遇到实体嵌套的情况,比如学生信息中包含多个活动。

在solr的data-config.xml中配置:

<entity name="studentProfile" pk="ID"             query="select CONCAT('studentProfile',studentProfileId) as solr_id,studentProfileId,name,location,description from studentProfile"             deltaQuery="select sp.studentProfileId as ID  from studentProfile sp,users u where u.registerTime > '${dataimporter.last_index_time}' and sp.email=u.email "                deltaImportQuery="select CONCAT('studentProfile',studentProfileId) as solr_id,studentProfileId,name,location,description from studentProfile where studentProfileId='${dataimporter.delta.ID}'"             >                <field name="id" column="solr_id"/>                <field name="studentprofile_id" column="studentProfileId"/>                <field name="studentprofile_name" column="name"/>                <field name="studentprofile_location" column="location"/>                <field name="studentprofile_description" column="description"/>                <field name="studentprofile_publicUri" column="publicUri"/>                <entity name="activity"                     query="select activityId,title,description from activity where studentProfileId = '${studentProfile.studentProfileId}' "                     >                        <field name="activity_id" column="activityId"/>                        <field name="activity_title" column="title"/>                        <field name="activity_description" column="description"/>               </entity></entity>

注意${studentProfile.studentProfileId}的写法。
在schema.xml中配置:
 <field name="studentprofile_id" type="string" indexed="true" stored="true" />   <field name="studentprofile_name" type="text_mmseg4j" indexed="true" stored="true" />   <field name="studentprofile_location" type="text_mmseg4j" indexed="true" stored="true" />   <field name="studentprofile_description" type="text_mmseg4j" indexed="true" stored="true" />   <field name="studentprofile_publicUri" type="text_mmseg4j" indexed="true" stored="true" />   <field name="activity_id" type="string" indexed="true" stored="true" multiValued="true"/>   <field name="activity_title" type="text_mmseg4j" indexed="true" stored="true" multiValued="true"/>   <field name="activity_description" type="text_mmseg4j" indexed="true" stored="true" multiValued="true"/>

注意子field中需要配置multiValued="true"
这样配置完成后创建的索引显示结果如下:
"docs": [      {        "id": "studentProfile6315bbe5-399f-49b3-9382-b5fb0c2e8e2c",        "studentprofile_location": "beijing",        "studentprofile_name": "lcq",        "studentprofile_id": "6315bbe5-399f-49b3-9382-b5fb0c2e8e2c",        "activity_id": [          "1",          "2"        ],        "activity_title": [          "dfsfs",          "fsfs"        ],        "activity_description": [          "lcq",          "haha"        ],        "_version_": 1527223001237422000      }    ]

配置查询时加权:
在solrconfig.xml中添加
<requestHandler name="search" class="solr.SearchHandler" default="true">     <lst name="defaults">       <str name="echoParams">explicit</str>       <str name="defType">dismax</str>       <str name="qf">          studentprofile_name^1 studentprofile_description^0.8       </str>       <str name="q.alt">*:*</str>       <str name="rows">10</str>       <str name="fl">*,score</str>     </lst>  </requestHandler>
使用solrj查询时:
query.set("qt","search");
即可。




0 0
原创粉丝点击