在结果中返回函数值

假设你有一个服务,你的用户可以搜索不同的公司,用户输入一个简单的关键字,可以返回匹配关键字的公司,但是有一天,用户要求返回的公司列表中可以显示公司跟用户的距离,这是该怎么做呢?

准备工作

在开始之前,需要先了解字段别名功能,具体可以参看这里

怎么做

1.假设我们在 schema.xml 中定义了如下索引结构:

1
2
3
4
5
6
< field name = "id" type = "string" indexed = "true" stored = "true"
required = "true" multiValued = "false" />
< field name = "name" type = "text" indexed = "true" stored = "true" />
< field name = "loc" type = "location" indexed = "true" stored = "true" />
< dynamicField name = "*_coordinate" type = "double" indexed = "true"
stored = "false" />

2.我们需要定义 location 字段类型,如下所示:

1
2
< fieldType name = "location" class = "solr.LatLonType"
subFieldSuffix = "_coordinate" />

3.再假设我们有以下索引数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
< add >
< doc >
< field name = "id" >1</ field >
< field name = "name" >Company 1</ field >
< field name = "loc" >56.4,40.2</ field >
</ doc >
< doc >
< field name = "id" >2</ field >
< field name = "name" >Company 2</ field >
< field name = "loc" >50.1,48.9</ field >
</ doc >
 
< doc >
< field name = "id" >3</ field >
< field name = "name" >Company 3</ field >
< field name = "loc" >23.18,39.1</ field >
</ doc >
</ add >

4.现在可以通过以下语句查询到名称中匹配 company  的公司

1
q=name:company&fl=*

5.假设我们已经获得了客户端位置是 50.0, 28.0,然后我们打算在公司结果列表中显示客户端跟这些公司的距离。这时我们需要将以下参数加载 fl 中:

1
dist:geodist(loc,50.0,28.0)

这样整个查询看起来像这样:

1
q=name:company&fl=*,dist:geodist(loc,50.0,28.0)

查询返回的内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<? xml version = "1.0" encoding = "UTF-8" ?>
< response >
< lst name = "responseHeader" >
< int name = "status" >0</ int >
< int name = "QTime" >0</ int >
< lst name = "params" >
< str name = "q" >name:company</ str >
< str name = "fl" >*,dist:geodist(loc,50.0,28.0)</ str >
</ lst >
</ lst >
< result name = "response" numFound = "3" start = "0" >
< doc >
< str name = "id" >1</ str >
< str name = "name" >Company 1</ str >
< str name = "loc" >56.4,40.2</ str >
< double name = "dist" >1077.4200268973314</ double >
</ doc >
< doc >
< str name = "id" >2</ str >
< str name = "name" >Company 2</ str >
< str name = "loc" >50.1,48.9</ str >
< double name = "dist" >1487.4260767512278</ double >
</ doc >
Chapter 4
153
< doc >
< str name = "id" >3</ str >
< str name = "name" >Company 3</ str >
< str name = "loc" >23.18,39.1</ str >
< double name = "dist" >3134.746384852772</ double >
</ doc >
</ result >
</ response >

上面结果中 dist 就是客户要的距离字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值