在结果中返回函数值
假设你有一个服务,你的用户可以搜索不同的公司,用户输入一个简单的关键字,可以返回匹配关键字的公司,但是有一天,用户要求返回的公司列表中可以显示公司跟用户的距离,这是该怎么做呢?
准备工作
在开始之前,需要先了解字段别名功能,具体可以参看这里
怎么做
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 就是客户要的距离字段。
如果你喜欢本文, 请长按二维码,关注公众号 分布式编程.
作者:分布式编程
出处:https://zthinker.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。