2013-11-13 2 views
1

У меня есть Solr 4.3.0, и я пытаюсь использовать SpatialRecursivePrefixTreeFieldType для пространственного поля. Данные поступают из поля геометрии MySQL, и SQL-запрос возвращает данные для этого поля, используя AsText(). Основной запрос выглядит следующим образом:Solr SpatialRecursivePrefixTreeFieldType и MySQL DIH

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" /> 

Когда я выполнить основные не-geofiltered запрос, ответ выглядит следующим образом:

{ 
    "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 км от точки Я фильтрация:

{ 
    "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": [] 
    } 
} 

Кто-нибудь знает, что здесь происходит? Я не знаю, является ли проблема на стороне индексирования или стороне запроса; Я не мог найти никакой документации по использованию MySQL с Solr DataImportHandler и новым SpatialRecursivePrefixTreeFieldType.

Спасибо!

ответ

1

Easy: Проблема в том, что вы индексируете свои данные с изменением широт и долгот. Если вы выберете формат WKT, как вы это сделали, то это «POINT (X Y)». Вы также можете сделать «Y, X», если это вам подходит. Я удивлен, что Solr (на самом деле Spatial4j) не жаловался на то, что вы используете значение Y -103, которое явно выходит за пределы. Существует пограничная проверка. Ошибка будет InvalidShapeException «Значение Bad Y -103.4590667 не находится в границах ...» (и затем граница)

+0

Спасибо! Я думаю, что некоторые данные должны быть выполнены в MySQL. Это займет некоторое время, поэтому я вернусь, как только это будет сделано. – dmaz99

Смежные вопросы