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