2014-06-23 4 views
0

Lucene 쿼리를 JSON 형식으로 serialize하는 것이 가장 좋습니다. 나는 신축성있는 검색 질의 DSL을 보았지만 lucene 용어에서 파생 된 것처럼 보입니다. 또한 Lucene은 직렬화 코드 유지 관리에서 벗어나는 것처럼 보입니다.lucene 쿼리를 JSON으로 직렬화 하시겠습니까?

JSON에서 "표준"형식을 찾고 있습니다. 검색어를 저장할 수 있어야하지만 사용자가 웹 UI에서 검색어를 저장하면 title:Matrix이 입력되지 않습니다. 또한 저장된 검색을 검색 한 다음 저장된 검색을 편집 할 수 있어야합니다. 질의를 나타내는 표준 json 형식이 있다면 좋을 것입니다. 특히 lucene 쿼리.

+0

어떻게해야할까요? – rahul

+0

@rahul 나는 그렇지 않다. 나는 omu_negru가 유망한 리드를 주었다고 생각하지만, 이것을 파악하는 데는 시간이 걸리지 않았습니다. – Matt

답변

0

표준 쿼리는 트리와 같은 구조를 가지므로 Json으로 변환하는 것은 간단해야합니다. boolean이나 dismax 질의를 위해 스스로를 호출하는 재귀 적 메소드를 생성하면된다. 나머지 쿼리는 (내 생각에는) 터미널 것들이다.

1

나는 Elasticsearch가 거의 없다는 것을 알고 있지만 Lucene이 아닌 다른 추가 쿼리 기능을 지원하기 때문에이 작업을 수행하고 있다고 생각한다.

쿼리를 마샬링/언 마샬링하면됩니다. 전체를 단일 이스케이프 처리되지 않은 문자열로 취급하십시오. 키 - 값 (필드 이름/값) 요소로 나누고 싶다면 conjuction/disjunction/etc를 가질 수 있다는 것을 잊지 마십시오. 그래서 이것은 사소한 것이 아닙니다.

직렬화 코드에 대한 의견은 쿼리에 적용되지 않는다고 생각하십시오. Query에는 각각의 쿼리 서브 클래스가 구현해야하는 추상 toString(String field) 메서드가 있으며 구문 분석 가능한 문자열을 제공합니다. toString()은 단지 이것을 호출합니다. 그리고 이것은 오랫동안 변하지 않았고, Query은 문자열 표현을 가져 오는 다른 방법을 제공하지 않으므로이 코드가 변경되는 것을 보지 않습니다. 따라서 코드를 변경하면 많은 코드가 손상 될 수 있습니다.

+0

내가 이해할 수 있는지 확실하지 않습니다. 예를 들어 줄 수 있습니까? 나는 또한 나의 질문을 업데이트했다. 아마 도움이 될 것이다. – Matt

+0

Lucene 쿼리는 JSON으로 완벽하게 직렬화 할 수 있도록 설계된 적이 없습니다. 당신의 예제 인'title : Matrix'는 가능할 수 있지만, 매핑이 쉽지 않은 더 복잡한 경우 (결합, 분리, 괄호, 범위 쿼리)가 있습니다. 쿼리를 단일 문자열 (예 : '(+ foo : bar -boo : baz) AND bob : [1 TO 2]')로 저장하라는 제안 이었지만, 어떤 이유로 인해 키 - 쌍을 만들려면 바퀴를 재발 명해야합니다. – mindas

+0

그게 내가 생각한 것. 나는 약간의 연구를해야 할 것 같아. – Matt

관련 문제