2012-01-10 1 views
0

EdgeNGram과 비슷한 패싯 필드의 부분 문자열을 기반으로 패싯 카운트를 얻는 방법이 있습니까?Solr - 패싯을 사용하여 가변 정밀 geohashes를 기반으로 문서 합계


솔라를 사용하여 고정밀 도로 거합 하 (geohash) 문자열을 저장하고 특정 거머리 정밀도로 문서 수를 계산하려고합니다. 패싯은 특정 geohash '셀'의 문서를 계산하는 데 사용됩니다.

지금까지 내가 할 수있는 유일한 방법은 geohashes 계층을 사용하는 것입니다.

예 : (인덱스 데이터에서) 현재 패싯 결과 집합 :

<lst name="facet_counts"> 
<lst name="facet_fields"> 
    <int name="svztdm7w">11</int> 
    <int name="sv87rzt8">3</int> 
    <int name="sv83t6bf">2</int> 
    <int name="syqxp43m">4</int> 
    <int name="syr9f0v2">4</int> 
    <int name="syp8p8hb">3</int> 
    <int name="tuuttmtt">3</int> 
    <int name="twj1ynm3">3</int> 
    <int name="w30n6u71">3</int> 
</lst> 
</lst> 

내가 정밀도 1 설정으로 원하는 것은 :

<int name="s">27</int> 
<int name="t">6</int> 
<int name="w">3</int> 

내가 정밀도 2 설정에서 원하는 것은 :

<int name="sv">16</int> 
<int name="sy">11</int> 
<int name="tu">3</int> 
<int name="tw">3</int> 
<int name="w3">3</int> 

건배.

답변

0

저는 Solr에서 geohashes로 많은 작업을했습니다. 나의 최신 작품은 geohashes를 포함한 다양한 색인 전략을 가진 LSP : http://code.google.com/p/lucene-spatial-playground/입니다. 내 이름과 거친 새를 검색하면 다양한 자료를 찾을 수 있습니다.

본질적으로 geohash 기반 히트 맵입니다. LOS에 대한 나의 TODO 목록에있는 것이지만, 당신은 geohashes를 색인하는 방법에 대한 약간의 조작으로 이해할 수 있습니다. geohash의 n-gramming 끝에 geohash 접두사 앞에 geohash의 길이 인 접두어를 붙입니다. 예를 들어 "16"대신 "216"을 사용하십시오. 16 진수 표기법을 사용하면 십진수 10 대신 16 자의 값을 얻을 수 있습니다. 패싯을 만들 때는 facet.prefix = 2를 사용하십시오.

행운을 빌어 요.

+0

예 히트 맵 - 하나 있습니다! 그건 잘된거야. 그것은 내 색인 생성이 약간 거추장 스럽다는 것을 의미합니다 (접두어 각각을 수행하기 위해 별도의 정규 표현식을 사용했습니다 - 이것이 가장 좋은 방법인지 확실하지 않음). 그 메모에, solo가 geohash를 계산하고 그것을 faceting을 위해 사용 가능하게 만들거나 그것이 제공 되어야만하는 간단한 방법이 있습니까? – Sensai

+0

Solr에는 GeoHashField가 내장 된 geohashing이 있지만 길이 프리픽스가 없습니다. 어떻게 또는 왜 정규 표현식을 사용했는지는 알 수 없습니다. 단순히 문자열의 길이를 계산하고 16 진수로 시작하십시오. 이 모든 논리를 UpdateRequestProcessor에 넣고 필드를 String으로 색인화합니다. –

관련 문제