欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

solr计算坐标距离,solr计算坐标,假设我们在 schema

来源: javaer 分享于  点击 23030 次 点评:143

solr计算坐标距离,solr计算坐标,假设我们在 schema


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

<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" />

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

<fieldType name="location"subFieldSuffix="_coordinate"/>

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

<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>

现在可以通过以下语句查询到名称中匹配 company 的公司 q=name:company&fl=*

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

dist:geodist(loc,50.0,28.0)

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

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

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

<?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><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 就是客户要的距离字段。

相关栏目:

用户点评