2012-01-26 3 views
0

디코딩 할 수있는 JSON 문자열이 들어있는 데이터를 인덱싱 할 수 있는지, 각 JSON 값을 별도의 값으로 인덱싱 할 수 있는지 알고 싶습니다.Solr - 데이터베이스의 JSON 쿼리 문자열을 인덱싱 하시겠습니까?

DIH를 사용하여 MySQL 데이터베이스에 연결하고 개별 열을 인덱싱 할 수 있습니다. 결과는 같을 것이다 다음

<response name="response" numFound="1" start="0" maxScore="2.7143538"> 
    ... 
    <result name="response" numFound="1" start="0" maxScore="2.7143538"> 
     <doc> 
     <float name="score">2.7143538</float> 
     <str name="id">82</str> 
     <str name="name">jorge</str> 
     <str name="otherinfo">{"day":15,"year":1989,"month":"January"}</str> 
    </doc> 
</result> 
</response> 

문제는 그 내가 디코딩하고 내 인덱스에 다음과 같은 것을하고 싶은 JSON 문자열은 "otherinfo"

<response name="response" numFound="1" start="0" maxScore="2.7143538"> 
    ... 
    <result name="response" numFound="1" start="0" maxScore="2.7143538"> 
     <doc> 
     <float name="score">2.7143538</float> 
     <str name="id">82</str> 
     <str name="name">jorge</str> 
     <str name="day">15</str> 
     <str name="year">1989</str> 
     <str name="month">January</str> 
    </doc> 
</result> 
</response> 

은 이것이 솔라와 전혀 관계가 없습니까? 사전

+0

JSON은 고정 된 구조입니까? 즉, 항상 '일', '년'및 '달'이라는 세 개의 키가 있습니까? 같은 순서로? – Chewie

+0

대답은 아니지만 생각입니다. 데이터베이스에 JSON 형식으로 데이터를 저장하지 않으려 고합니다. 이 질문을하는 것은 한 가지 예일뿐입니다. DB는 프리젠 테이션을 개최해야하는 곳이 아닙니다. 특히 개별 필드에 실제로 액세스해야하는 경우 특히 그렇습니다. 날짜는이를 지원하는 DB 필드 유형에 저장해야합니다. 이 날짜까지 정렬하거나 선택할 필요가 없기를 바랍니다. 당신은 누군가가 그것을 찾고 싶어한다는 것을 증명했습니다. – rfeak

답변

1
  1. 에서

    덕분에 당신은 당신이 특정 사건을 처리 할 자신 만의 사용자 정의 변압기를 작성할 수 자바 주위에 당신의 방법을 알고 있다면.

  2. DIH RegexTransformer를 사용하여 JSON을 구문 분석 해 보셨습니까?
    필자는 json 형식 (문서의 문서에 문서가 포함되어 있지 않음 ...)을 수정 한 경우 특히이 작업을 수행해야한다고 생각합니다.

  3. 난 그냥 ScriptTransformer, 당신은 자신의 파서를 작성할 수 있습니다 나타났습니다. 나는 DB에서 otherinfo 필드로 시작하는 JSON 문자열

+0

위대한! 변압기를 보았습니다 (json 데이터 형식이 고정되지 않았으므로) 그리고 hurah! 나는 모습 변압기 스크립트를 만든 다음! –

+0

+0

JSON 문자열을 디코딩하기 위해 eval (필자가 전혀 좋아하지 않은)을 사용했습니다. 이 기술에서 JSON 문자열을 디코드하는 더 좋은 방법이 있는지 아는 사람 있습니까? 어쨌든 고맙게 생각하면서 도와 주셔서 감사합니다. –

1

인가 ...이 갈 수있는 방법이라고 생각?


당신은 인해 임의 스키마 SOLR 데이터를 저장하도록 동적 필드 (docs, explanation) 및 클라이언트 측 코드가 필요합니다.

당신이 좋아하는 스키마에 동적 필드를 정의해야합니다 :

dyn_string_*: store text as it is 
dyn_text__*: store text and index it for search 

다음

동적 필드 (의사 경고 SOLR하는 DB 필드를 매핑 다이 하이드로 말할 필요 것이다, 미안하지만 나는) 다이 하이드로 익숙하지 않다 :

Select 
    day as dyn_number_day, 
    name as dyn_text_name 
from 
    tablename 

편집

데이터 구조를 질의 할 필요가 있습니다. 스키마가없는 스키마가없는 데이터 스토어가 필요합니다.

MongoDB와 같은 문서 DB는 정확하게 기능을 제공합니다. 삽입시 결정한 임의의 필드에 데이터를 저장하십시오. 그리고 어떤 종류의 ad-hoc 쿼리을 귀하의 데이터에서 실행할 수 있습니다.

데이터에 대한 색인을 생성 할 수있는 요청 처리기를 인식하지 못합니다. 업데이트 된 (또는 추가되거나 제거 된) 행을 주기적으로 반입하고 JSON 필드를 디코딩 한 후 Solr에 색인을 작성하는 코드를 작성할 수 있습니다.

현재과 관계없이 속성에 속성을 저장하려면 skinny data model을 사용해야합니다. 나는 'Set intersection in MySQL: a clean way'이라는 질문에 잠시 뒤로 물었다.

Recap : MongoDB와 친구들은 필요한 기능을 정확하게 갖추고 있습니다. 릴레이션과 참조 무결성을 원하면 RDBMS를 계속 사용할 수 있습니다. 여전히 JSON 일을 원한다면이를 분석하고 solr에 색인을 생성하는 활성 시스템을 개발하십시오. 그러나 당신은 (조건이 적용됩니다!)을 얻을 수 있기 때문에 마른 데이터 모델로 이동하는 것이 좋습니다. Solr이 SQL에서 제공하는 쿼리 기능입니다.

이국적인 기술 : Neo4j와 같은 그래프 데이터베이스에는 문서 데이터베이스 기능 (임시 쿼리)과 관계가 있습니다. 관계는 하나의 노드를 다른 노드로 직접 연결하며 조인은 필요하지 않습니다. 따라서 참조 무결성이 부족한 한 단계입니다.

+0

오케이, 나는 이것을 몰랐다. 감사합니다 –

+0

그래, 데이터가 데이터베이스에 JSON 문자열로 –

2

나는 이것에 대해 논평했다. 나는 대신 대답해야한다고 결심했다.

문제는 Solr 수준이 아닙니다. 데이터베이스에이 방식으로 데이터를 저장하면 안됩니다. 장기적으로 Solr 색인 수준에서 해킹하려고하는 것과는 달리이 문제를 해결하는 것이 좋습니다.

귀하의 질문은 누군가 (아마 최종 사용자)가이 데이터로 검색하는 데 관심이 있음을 입증합니다. 이는 데이터베이스에서 실제 날짜 또는 시간 소인 필드로 저장되어 적절히 선택되거나 정렬 될 수 있음을 의미합니다.

나는 이것이 사람들이 당신의 질문에 정확하게 대답하지 않는다고 사람들이 좋아하지 않을 것이라고 확신하지만, 누군가 당신에게 이것을 말할 필요가있다.

+0

rFreak, 나는 당신과 더 동의 할 수 없었다 ... 나는이 데이터베이스를 상속했으며 DB를 재 설계하는 어려운 선택을해야한다. –