Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查Solr中的空间搜索是否有效

如何检查Solr中的空间搜索是否有效
EN

Stack Overflow用户
提问于 2013-06-20 04:19:20
回答 2查看 1.3K关注 0票数 0

我正在尝试Solr中的空间搜索。我所做的是停止服务,然后更新collection1schema.xml文件以包含以下内容:

代码语言:javascript
运行
AI代码解释
复制
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
<dynamicField name="*_coordinate"  type="tdouble" indexed="true"  stored="true"/>

<field name="location" type="location" indexed="true" stored="true"/>
<field name="location_0_coordinate" type="double" indexed="true" stored="true"/>
<field name="location_1_coordinate" type="double" indexed="true" stored="true"/>

然后,我再次启动该服务以更新Solr中的文档:

代码语言:javascript
运行
AI代码解释
复制
$local_select = 'http://localhost:8080/solr/select?q=ss_type:(business%20OR%20user%20OR%20blog)&wt=json';

$url = $local_select;
$data = file_get_contents($url);
$r_data = json_decode($data, true);

$docs = $r_data['response']['docs'];



if(!empty($docs)){
    foreach($docs as $doc){


        if(!empty($doc['tm_field_business_address:postal_code'][0])){

            $postal_code = urlencode($doc['tm_field_business_address:postal_code'][0]);

            $api = 'http://maps.googleapis.com/maps/api/geocode/json?address=' .  $postal_code . '&sensor=false';
            $api_results = file_get_contents($api);
            $data = json_decode($api_results, true);

            if($data['status'] == 'OK'){
                $location = $data['results'][0]['geometry']['location'];

                unset($doc['_version_']);

                $doc['location_0_coordinate'] = $location['lat'];
                $doc['location_1_coordinate'] = $location['lng'];
                $new_docs[] =  $doc;
            }
        }
    }
}




$local_update = 'http://localhost:8080/solr/update/json';
$local_commit = 'http://localhost:8080/solr/update?commit=true';

//update the solr index
if(!empty($new_docs)){
    $json_doc = json_encode($new_docs);

    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HTTPHEADER => array("Content-type:application/json"),
        CURLOPT_URL => $local_update,
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $json_doc,
    ));

    $update_response = curl_exec($curl);
    curl_close($curl);


    //commit the changes
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $local_commit
    ));


    $commit_response = curl_exec($curl);
}

curl响应都是ok的,当我使用以下查询检查结果时:

代码语言:javascript
运行
AI代码解释
复制
http://localhost:8080/solr/select?q=ss_type:(business%20OR%20user%20OR%20blog)

它返回结果:

代码语言:javascript
运行
AI代码解释
复制
<double name="location_0_coordinate">49.9641523</double>
<double name="location_1_coordinate">10.1378365</double>

现在我的问题是,我真的正确地设置了吗?如果是,当我使用像下面这样的空间查询时,我可以使用什么查询来检查它是否真的返回了什么东西:

代码语言:javascript
运行
AI代码解释
复制
http://localhost:8080/solr/select/?q=ss_type:(business%20OR%20user%20OR%20blog)&fq={!geofilt}&sfield=location&pt=49.9641523,10.1378365&d=0

这里我的主要问题是,我真的不知道为参考点提供什么,以便它返回Solr索引中已经存在的记录。

例如,如果我在索引中有以下坐标:

代码语言:javascript
运行
AI代码解释
复制
49.9641523,10.1378365

返回具有该坐标的特定记录的空间查询将是什么。我尝试使用d=0,但没有返回任何内容:

代码语言:javascript
运行
AI代码解释
复制
<response>
<result name="response" numFound="0" start="0"/>
</response>

有什么想法吗?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-06-20 04:36:26

您应该将纬度和经度存储在同一个字段中,用逗号分隔。例如,<latitude>,<longitude>

字段类型应为location

代码语言:javascript
运行
AI代码解释
复制
<dynamicField name="*_coordinate"  type="location" indexed="true" stored="true"/>

在查询中传入以下参数:

pt -用作过滤器中心的点。指定为逗号分隔的双精度列表。它是lat,lon。

d -从点到任何用于过滤的外边的距离(以千米为单位)

sfield -带坐标的字段。

以下示例地理空间查询将返回指定点49.9641523,10.1378365 5 5km内的所有位置

代码语言:javascript
运行
AI代码解释
复制
http://localhost:8080/solr/select?q=*:*&fq={!geofilt}&pt=49.9641523,10.1378365&sfield=location_coordinate&d=5
票数 1
EN

Stack Overflow用户

发布于 2013-06-20 06:08:25

好的,我想出来了,在schema.xml文件中有一个默认的动态字段,它允许你存储坐标,它的字段类型是location。因此,即使我不能访问schema.xml文件,我仍然可以这样定义它:

代码语言:javascript
运行
AI代码解释
复制
$doc['locm_store'] = $location['lat'] . ',' . $location['lng'];

xml文档中的等价物是:

代码语言:javascript
运行
AI代码解释
复制
<field name="locm_store">123,456</store>

其中123是纬度,456是经度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17205189

复制
相关文章
LeetCode 1391. 检查网格中是否存在有效路径(BFS)
给你一个 m x n 的网格 grid。网格里的每个单元都代表一条街道。grid[i][j] 的街道可以是:
Michael阿明
2020/07/13
5.1K0
育种中如何检查系谱是否有错误
这里推荐我写的R包learnasreml中的check_pedigree函数,简单好用,结果友好。能够检查:
邓飞
2021/12/12
3K0
LeetCode 1003. 检查替换后的词是否有效(栈)
对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。
Michael阿明
2020/07/13
7680
LeetCode 1003. 检查替换后的词是否有效(栈)
在Solr中搜索人名的小建议
搜索人名是我们在许多应用程序中经常用到的功能。比如对书店来说,按作者名检索的功能就相当重要。虽然很难起一个完美的名字,但是我们可以使用Solr的一些功能,使绝大多数英文名搜索达到绝佳的效果。
让让子Dorothy
2018/05/18
2.8K0
如何检查 Java 数组中是否包含某个值 ?
在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下。
用户7886150
2021/04/28
9.6K0
Javascript中对象如何检查key(键)是否存在
如果要特别测试对象实例的属性(而不是继承的属性),请使用hasOwnProperty:
IT工作者
2022/02/09
27.3K0
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/07/14
2.1K0
如何检查 MySQL 中的列是否为空或 Null?
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/08/03
4.5K0
如何检查 MySQL 中的列是否为空或 Null?
Node.js中如何检查是否存在某个目录
Node.js fs本地模块提供了几种有用的方法,可用于处理目录。 检查Node.js中是否存在某个目录的最简单方法是使用fs.existsSync()方法。
ccf19881030
2020/10/29
12.3K0
JS中,如何检查对象是否为数组?
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2021/02/02
7.6K0
JS中,如何检查对象是否为数组?
灵魂拷问:如何检查Java数组中是否包含某个值 ?
另外,我想要告诉大家的是,作为程序员,我们千万不要轻视这些基础的知识点。因为基础的知识点是各种上层技术共同的基础,只有彻底地掌握了这些基础知识点,才能更好地理解程序的运行原理,做出更优化的产品。
沉默王二
2019/12/17
5.2K0
Solr实现全文搜索
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
星哥玩云
2022/07/27
9460
Solr实现全文搜索
Solr搜索服务的搭建(Liunx)
Solr 搜索服务的搭建 总结一下solr 搜索服务的搭建 环境准备 需要JDK1.5以上版本,最新版的solr已经内置了tomcat ,无需准备可直接运行 Liunx 环境(这里我选用的是Centos6.5) Solr搭建 第一步 下载solr solr下载地址 第二步 解压 tar -zxvf solr-6.4.1.tgz 第三步 在/usr/local/下创建 solr 目录 mkdir solr 第四步 复制solr-6.4.1 目录下的内容到/usr/local/solr 下
颍川
2019/11/20
8630
RedHat 8 如何检查端口是否联通
其中可能有各种原因导致端口没有联通,通常为操作系统本身的防火墙,托管服务器中心的防火墙等。
HoneyMoose
2021/09/04
2.3K0
RedHat 8 如何检查端口是否联通
如何检查linux是否安装了php
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113426.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
4.4K0
如何检查linux是否安装了php
文本获取和搜索引擎如何评估一个算法是否有效
coursera课程 text retrieval and search engine 第三周 推荐。
爬蜥
2019/07/09
7950
在ssh中利用Solr服务建立的界面化站内搜索---solr2
JackieZheng
2018/01/08
8750
在ssh中利用Solr服务建立的界面化站内搜索---solr2
在bash脚本中如何检查一个命令是否存在
避免使用 which。它是一个外部进程,相对而言 hash、type 或 command 这样的内置程序执行效率更高,你还可以依靠内置程序来实际执行所需的操作,而且外部命令的效果很容易因系统而异。
程序熵
2023/09/25
7940
在bash脚本中如何检查一个命令是否存在
如何检查 Android 设备是否支持 Widevine DRM
想知道您的 Android 设备是否可以流式传输来自 Netflix 和 Amazon Prime Video 的高清视频?这是检查 Widevine DRM 支持的方法!
天天Lotay
2023/10/15
3.1K0
如何检查 Android 设备是否支持 Widevine DRM
点击加载更多

相似问题

如何检查布尔搜索是否有效

37

Spring Solr地理空间搜索

19

带空间的Solr模糊搜索

14

带外空间Solr中的模糊搜索

17

Solr多核连接与空间搜索

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档