3

Solr4 とその空間機能のトラブルシューティングを試みています。フィールド「geo」で索引付けされたドキュメントがあります。

その中に私は次のものを持っています

緯度 -34.7413

経度 149.7102

Stored as <geo>-34.741328,149.710238</>

同じドキュメントのインデックス作成も試みました

<geo> 149.710238 -34.741328 

これは、値をコンマで区切っていない場合に推奨されます (緯度/経度の順序を逆にして、値の間にスペースを入れます)。

ドキュメントのインデックスは問題ありません。

ポリゴン検索を送信しようとしています。多角形は三角形で、三角形の下の 3 つの点が時計回りに並んでいると想像できます。これは、ターゲット座標が中央のどこかにある非常に大きな三角形です。簡単なデバッグを期待して三角形を選択しました。これらの検索用に、より複雑な形状を描画するつもりです。

(-34.580136904223494, 149.6165823974609)

(-34.84203933395146, 150.0175833740234)

(-34.84654761634415, 149.4627738037109)

Solr に次のクエリを送信しましたが、エラーが発生しました。

fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627))" 

トライアングルでの私の試み。

fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627, -34.5801 149.6165))"

ポリゴンを「閉じる」ために、三角形に最後の座標を追加しようとしました。上記の 2 つのクエリは、次のエラーのみで結果を返しません。

ERROR 500 読み取れません: POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627, -34.5801 149.6165)

私の質問は、最初にどこを見るべきかということです。JTS ライブラリがインストールされています。Solr ログはこれを記録します。

19:11:50

SEVERE

SolrDispatchFilternull:com.spatial4j.core.exception.InvalidShapeException: Unable to read: POLYGON((-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627))

誰でも提供できるポインタをありがとう。問題は、solr の設定の問題、どういうわけか何かが正しくインストールされていない、座標と形状を送信する方法、または何か不足していると思います。

4

2 に答える 2

3

OK、だから私はこれで数日後、インターネット全体に現れて自分自身と他の人のSolr空間の問題を助けているDavidSmileyの助けを借りてそれを修正したと思います-私たちが会ったら私はあなたにたくさんのビールを注ぎます-ありがとうあなたの助け。

各座標の緯度/経度を逆にする必要があり(代わりに経度/緯度)、それは機能しました。すぐに。とても簡単。

fq=geo:"Intersects(POLYGON((149.4023 -34.6072, 149.4023 -34.8690, 149.9022 -34.8690, 149.9022 -34.6072, 149.4023 -34.6072)))" 

これの代わりに

fq=geo:"Intersects(POLYGON((-34.6072 149.4023, -34.8690 149.4023, -34.8690 149.9022, -34.6072 149.9022, -34.6072 149.4023)))" 

うまくいけば、このスレッドは他の人を助けます。

疑わしいときは、次のようにこれをデバッグしようとしました。1. solr.warファイルを解凍し、ファイルではなくフォルダーとして保存します。サーバーによっては、これを行う方法はたくさんあります。私のようなアマチュアにとって、whmプラグインであるconfigserverexplorerはあなたの友達です:)。2. jtsプラグインをダウンロードし、解凍します。/lib/フォルダー内にファイルjts-1.12.jarがありました。これはお金のファイルです。3.これをsolrinstall/solr.war / WEB-INF / lib /の場所にアップロードします。他の多くの.jarファイルが表示されている場合は、適切な場所にあることがわかります。4.必要に応じて、warファイルを再パックできます。または、このように解凍して動作するはずです。5.ここのsolrwikiに記載されているように、スキーマが正確であることを確認してください。デフォルトではありません。確認して、もう一度確認してください。これを追加

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

次の方法でフィールド「geo」を追加します。

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

データにインデックスを付けます。私のデータは緯度/経度の順序で、次のようになっています。geo:-34.741328,149.710238 Lat =水平、Long=垂直線を覚えておいてください。6. Luceneの検索方法を使用して、検索をテストします。実行できる非常に単純な長方形の検索があります。ターゲットドキュメントのGEOポイントを見つけてから、左下隅と右上隅で座標を見つけます。長方形に必要なのは2ポイントだけで、範囲検索を行うだけです。私にとってはこんな感じです。

fq=geo:[-34.8690,149.4023 TO -34.6072,149.9022]

それが機能する場合は、基本的なGEO検索が機能しています。

  1. 次に、これらの座標からポリゴンを作成しましょう。ポリゴン(この場合は長方形)を作成するには、5つの座標、開始点、長方形の他の3つのポイント、そして形状(ポリゴン)を閉じるための開始座標が必要です。何らかの理由で、ポリゴン検索では異なる緯度/経度のレイアウトが使用されます。これを逆にする必要があります。経度を最初に置きます。また、この形状をCOUNTER-CLOCKWISE形式で作成する必要があります。したがって、上記の座標で構成されたポイントを使用したポリゴン検索は次のようになります。

    fq = geo: "Intersects(POLYGON((149.4023 -34.6072、149.4023 -34.8690、149.9022 -34.8690、149.9022 -34.6072、149.4023 -34.6072)))"

ご覧のとおり、lat/longはlong/latであり、各long / latはスペースで区切られ、各座標ペアはコンマ「、」で区切られています。

うまくいけば、このスレッドは他の人を助けます。

于 2012-11-16T07:09:19.077 に答える
2

fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627, -34.5801 149.6165))"

ほとんど正解でした。はい、ポリゴンを閉じる必要があります。ここで行いました。しかし、座標リストの周りに余分な括弧がありません:

fq=geo:"Intersects(POLYGON((-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627, -34.5801 149.6165)))"

余分な括弧は、座標のリストが複数ある可能性があるためです。最初のリストは外側のリングで、次のリストは内側のリング、AKA 穴です。これは標準の WKT です。

于 2012-11-14T16:07:55.303 に答える