【问题标题】:Solr geographical searchSolr 地理搜索
【发布时间】:2016-12-02 01:19:00
【问题描述】:

我正在测试地理搜索的 solr 查询,这是我的查询:

 SolrQuery query =new SolrQuery();
        query.setParam("q","*:*");
        query.setParam("fq","geofilt");
        query.setParam("d","100000");
        query.setParam("pt","51.53750834,-0.19329616");
        query.setParam("sfield","location_s");

我没有得到任何结果,尽管有非常接近的点并且指向 pt 的点也很精确。 知道是什么原因吗??

提示:我使用此字段类型进行空间搜索(默认情况下在 schema.xml 中):

<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
        geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" />

因为当我尝试使用 solr 网站中提到的这个时,我得到一个错误:

<fieldType name="location_rpt"   class="solr.SpatialRecursivePrefixTreeFieldType"                  spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
               autoIndex="true"
               distErrPct="0.025"
               maxDistErr="0.000009"
               units="degrees" />

这是我的字段定义:

<field name="location_s" type="location_rpt" indexed="true" stored="true"/>

提前致谢!

【问题讨论】:

    标签: solr lucene gis


    【解决方案1】:

    请仅添加 1 个为 x/y 提供服务的字段,而不是此类字段名称:

    <dynamicField name="*_coordinate"  type="tdouble" indexed="true"  stored="true"/>
    

    这将允许您直接以 solr 地理格式放置数据:

      "env": "DEV",
            "latlgn_0_coordinate": -2.6263,
            "latlgn_1_coordinate": -44.1978,
    

    请查看solr spatialsearchsolr wiki spatialsearch

    【讨论】:

    • 谢谢,但需要的配置是将其添加到 schema.xml: 但是当我这样做时,我得到 solr 错误“class not fount error”和“noclassDefFound”!!
    • 嗯,好的,所以您需要将 solr jts lib 添加到您的类路径中,或者将其作为库放入您的项目中(在 web.xml 中引用它的 Web 项目下)。 xml)
    【解决方案2】:

    如上所述,请确保在您的运行时类路径中有。 您可以在您的路径中下载并安装 JTS 库:JTS Library

    Solr 手册 solr install documentation

    JTS jar 文件也必须位于 Solr 的类路径中。由于一个 事物的组合,JTS 不能简单地用“”来引用 solrconfig.xml 中的条目;它需要在 Solr 的战争中的 WEB-INF/lib 中 文件,基本上。

    享受:)

    【讨论】:

    • stackoverflow 的类似问题:[stackoverflow 问题 #1][3]
    【解决方案3】:

    感谢 jean,它在不使用 JTS 库的情况下与我一起工作,solr 模式已经带有我使用的这种字段类型:

     <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
       geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" />
    

    我定义了一个该类型的字段并且它起作用了。这是我的查询:

     SolrQuery query =new SolrQuery();
            query.set("q","*:*");
            query.set("fq","{!geofilt}");
            query.set("pt","32.014708,35.873725");
            query.set("sfield","location");
            query.set("d","100");
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      相关资源
      最近更新 更多