【问题标题】:Search in solr with multivalued location field使用多值位置字段在 solr 中搜索
【发布时间】:2011-12-09 13:51:11
【问题描述】:

我可以为 solr 中的位置类型字段索引多个值。修改后的 schema.xml 和索引修改后的 exampledocs 的响应看起来像 查询:

  http://192.168.3.19:8983/solr/select?wt=json&indent=true&q=*:*

回应:

{
    "id":"TWINX2048-3200PRO",
    "name":"CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail",
    "manu":"Corsair Microsystems Inc.",
    "price":185.0,
    "popularity":5,
    "inStock":true,
    "manufacturedate_dt":"2006-02-13T15:26:37Z",
    "payloads":"electronics|6.0 memory|3.0",
    "cat":["electronics","memory"],
    "store":["37.7752,-122.4232","37.7752,-122.4232","38.7752,-122.4232","39.7752,-122.4232"],
    "features":[
      "CAS latency 2,\t2-3-3-6 timing, 2.75v, unbuffered, heat-spreader"]},
  {
    "id":"VS1GB400C3",
    "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
    "manu":"Corsair Microsystems Inc.",
    "price":74.99,
    "popularity":7,
    "inStock":true,
    "manufacturedate_dt":"2006-02-13T15:26:37Z",
    "payloads":"electronics|4.0 memory|2.0",
    "cat":["electronics","memory"],
    "store":["37.7752,-100.0232","37.7752,-122.4232","38.7752,-122.4232","39.7752,-122.4232"]},
  {
    "id":"VDBDB1A16",
    "name":"A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM",
    "manu":"A-DATA Technology Inc.",
    "popularity":0,
    "inStock":true,
    "manufacturedate_dt":"2006-02-13T15:26:37Z",
    "payloads":"electronics|0.9 memory|0.1",
    "cat":["electronics","memory"],
    "store":["45.17614,-93.87341","37.7752,-122.4232","38.7752,-122.4232","39.7752,-122.4232"],
    "features":[
      "CAS latency 3,\t 2.7v"]},
  {

witch 表示数据存储正确。 如果我查询第一个存储的地理位置,它可以正常工作,但如果我搜索第三个或第四个地理位置,solr 不会返回任何结果。 如果我运行以下查询:

http://localhost:8983/solr/select?wt=json&indent=true&q=*:*&fq={!geofilt%20pt=45.17614,-93.87341%20sfield=store%20d=5}

我得到了正确的答案:

{ "id":"VDBDB1A16", "name":"威刚 V 系列 1GB 184-Pin DDR SDRAM 无缓冲 DDR 400 (PC 3200) 系统内存 - OEM", "manu":"威刚科技", “人气”:0, “库存”:真, “manufacturedate_dt”:“2006-02-13T15:26:37Z”, "payloads":"电子|0.9 内存|0.1", “猫”:[“电子”,“记忆”], "商店":["45.17614,-93.87341","37.7752,-122.4232","38.7752,-122.4232","39.7752,-122.4232"], “特征”:[ "CAS 延迟 3,\t 2.7v"]}, { 但如果查询是: http://localhost:8983/solr/select?wt=json&indent=true&q=*:*&fq={!geofilt%20pt=38.7752,-122.4232%20sfield=store%20d=50}

我不会得到任何结果。 这是一个解决问题吗?有什么解决办法吗?

【问题讨论】:

  • 你能告诉我们你正在使用的查询没有返回结果吗?
  • 我更新了问题,抱歉耽搁了,但那是周末;)

标签: solr lucene geolocation


【解决方案1】:

老问题,但它仍在许多 Google 搜索结果中,所以这里有更多关于多值坐标字段的信息:

您可以将以下内容添加到您的 schema.xml:

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

然后将location_rpt 字段用于多值坐标字段,并从Solr 4's new spatial search 提供的所有优势中受益。

如果您使用自定义的 spatialContextFactory,您还需要将 JTS jar 添加到您的 solr 类路径中。如果您从 fieldType 定义中删除该参数,多值字段仍然有效,但其他高级功能将无法使用。

【讨论】:

    【解决方案2】:

    根据 vuky 在 d whelan 的回答中引用的票证 (SOLR-2154),这应该在所有新的 Solr 版本中。这已通过票据 SOLR-3304 (https://issues.apache.org/jira/browse/SOLR-3304) 修复,该票据在 2012 年 9 月 17 日被标记为已修复。

    我真的找不到它应该工作的特定版本,但如果我阅读票证中的 cmets,我想 2013 年 5 月之后发布的所有内容都应该工作。

    【讨论】:

      【解决方案3】:

      LatLon 类型不能是多值的。

      http://wiki.apache.org/solr/SpatialSearch#LatLonType

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2017-06-10
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多