首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr: DIH查询和multiValued字段?

问Solr: DIH查询和multiValued字段?
EN

Stack Overflow用户
提问于 2018-08-06 16:26:55
回答 1查看 358关注 0票数 0

我试图在Solr中设置一个多值字段,但在我的情况下它失败了!

DB查询结果(示例)

代码语言:javascript
复制
|id  | another_id    | name          | phone       | type        |
|----------------------------------------------------------------|
|'1' | '11'          | 'F. Brown'    | '112233440' | 'employee'  |
|'2' | '22'          | 'Jhon Smith'  | '123123123' | 'guest'     |
|'2' | '22'          | 'Jhon Smith'  | '321321321' | 'guest'     |

Solr-data-config.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
  <dataSource   type="JdbcDataSource"
                driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost:3306/servme_prd"
                user="root"
                password="root" />
  <document>
    <entity name="person_cards" query="SELECT table1.id, table2.id AS another_id, table1.name, table2.phone, table1.type 
        FROM table1
        INNER JOIN table2 ON table1.id = table2.fk_id">
        <field column="id" name="uid" />
        <field column="another_id" name="pid" />
        <field column="name" name="name" />
        <field column="phone" name="phone" />
        <field column="type" name="type"/>
    </entity>
</document>
</dataConfig>

managed-schema.xml

代码语言:javascript
复制
<uniqueKey>uid</uniqueKey>
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="uid" type="string" docValues="false" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="pid" type="string" docValues="false" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="string" indexed="true" stored="true"/>
<field name="phone" type="string" docValues="false" multiValued="true" indexed="true" stored="true"/>
<field name="type" type="string" indexed="true" stored="true"/>

无论何时,我都不会将电话作为多值字段进行完全导入;示例solr查询响应:

代码语言:javascript
复制
{
    "name":"F. Brown",
    "uid":"1",
    "pid":"11",
    "phone":["112233440"],
    "type":"employee" 
    "_version_":1608065390436417536
},
{
    "name":"Jhon Smith",
    "uid":"2",
    "pid":"22",
    "phone":["123123123"],
    "type":"guest" 
    "_version_":1608065390436417536
},
{
    "name":"Jhon Smith",
    "uid":"2",
    "pid":"22",
    "phone":["321321321"],
    "type":"guest" 
    "_version_":1608065390436417536
}

当我想从solr查询搜索中获得以下响应时:

代码语言:javascript
复制
{
    "name":"F. Brown",
    "uid":"1",
    "pid":"11",
    "phone":["112233440"],
    "type":"employee" 
    "_version_":1608065390436417536
},
{
    "name":"Jhon Smith",
    "uid":"2",
    "pid":"22",
    "phone":["123123123", "321321321"],
    "type":"guest" 
    "_version_":1608065390436417536
}

solr部分中缺少的东西,所以我没有让多值字段像预期的那样工作吗?

顺便说一下,我使用的是安装在ubuntu 14服务器上的Solr 7.4。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-06 18:49:46

由于您使用的是MySQL,一个快速修复方法是使用GROUP_CONCAT,然后拆分列用DIH的RegexTransformer

代码语言:javascript
复制
<entity transformer="RegexTransformer" name="person_cards" query="SELECT 
        table1.id, 
        table2.id AS another_id, 
        table1.name, 
        GROUP_CONCAT(table2.phone) AS phone, table1.type 
    FROM table1
    INNER JOIN table2 ON table1.id = table2.fk_id
    GROUP BY uid
    ">
    ...
    <field column="phone" name="phone" splitBy="," />
    ...
</entity>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51711961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档