2

Solr 4.3.0 をセットアップしましたが、空間フィールドに SpatialRecursivePrefixTreeFieldType を使用しようとしています。データは MySQL ジオメトリ フィールドから取得され、SQL クエリは を使用してそのフィールドのデータを返しますAsText()。基本的なクエリは次のようになります。

SELECT AsText(data_geo) as data_geo FROM table;

data_geo フィールドは、schema.xml で次のように定義されています。

<field name="data_geo" type="location_rpt" indexed="true" stored="true" 
    multiValued="false" />`

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

ジオフィルタリングされていない基本的なクエリを実行すると、応答は次のようになります。

{
  "responseHeader": {
    "status": 0,
    "QTime": 0,
    "params": {
    "indent": "true",
    "q": "*:*",
    "_": "1384375755970",
    "wt": "json"
    }
  },
  "response": {
    "numFound": 1,
    "start": 0,
    "docs": [
      {
        "date_modified": "2013-11-13T16:53:57Z",
        "id": "165733_0_1",
        "data_geo": "POINT(43.87910249999999 -103.4590667)",
        "_version_": 1451618631810023400
      }
    ]
  }
}

{!geofilt} を追加すると、上記のポイントがフィルタリングしているポイントから 10 km 以内にあるにもかかわらず、すべての結果が除外されます。

{
  "responseHeader": {
    "status": 0,
    "QTime": 1,
    "params": {
      "indent": "true",
      "q": "*:*",
      "_": "1384376149059",
      "wt": "json",
      "fq": "{!geofilt pt=43.879103,-103.459067 sfield=data_geo d=10}"
    }
  },
  "response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  }
}

ここで何が起こっているか知っている人はいますか?問題がインデックス作成側にあるのかクエリ側にあるのかわかりません。Solr DataImportHandler と新しい SpatialRecursivePrefixTreeFieldType で MySQL を使用する方法に関するドキュメントは見つかりませんでした。

ありがとう!

4

1 に答える 1

2

簡単: 問題は、緯度と経度を逆にしてデータのインデックスを作成していることです。先ほどと同じように WKT 形式を選択すると、「POINT(XY)」の順序になります。都合がよければ、「Y, X」を実行することもできます。Solr (実際には Spatial4j) が、明らかに範囲外である -103 の Y 値を使用していることについて文句を言わなかったことに驚いています。境界チェックがあります。エラーは InvalidShapeException "Bad Y value -103.4590667 is not in bound ..." (そして境界) になります。

于 2013-11-14T07:51:45.140 に答える