문제

를 사용하고 싶 CouchDB 일부 데이터를 저장하는 나를 위해 다음 사용하 RESTful api 를 호출하여 데이터를 얻을 내가 필요합니다.나의 데이터베이스는"시험"그리고 내 모든 문서도 비슷한 구조 및 다음과 같이(는 hello_world 는 문서 ID):

"hello_world" : {"id":123, "tags":["hello", "world"], "text":"Hello World"}
"foo_bar" :{"id":124, "tags":["foo", "bar"], "text":"Foo Bar"} 

나는 무엇을 할 수 있는 것은 나의 사용자가 쿼리를 전송과 같은:"나에게 모든 서류를 포함하는 단어'hello world',예를 들어.내가 노는 전망을 좋아하지만 그들은 할 수 있는 이동 중 하나 또는 그 이상의 값으로"키를"부분도 함수입니다.그는 기능을 제공하여 다음과 같은 것이 가능합니다.

http://localhost:5984/test/_design/search/_view/search_view?key="안녕하세요"

그러나 이것을 허용하지 않기 시작하죠 내 사용자 지정 query string.예를 들어,어떤 경우에는 그들을 검색에 대한"hello world!".나는 두 가지 쿼리:하나는"안녕하세요"및"세상"그럼 내가 무리를 쓸 자바 스크립트의 결과를 결합하고 중복을 제거하거,etc.(YUCK!).내가 정말 원하는 것은 있을 수 있 다음과 같은 것이 가능합니다.

http://localhost:5984/test/_design/search/_view/search_view?term="hello world!"

다음 매개 변수를 사용하여"안녕하세요"전망 맵/감소 기능을 찾아 모든 서류를 모두 포함하는"안녕하세요","세계에서"태그를 배열입니다.이런 일도 가능 CouchDB?할 수 있는 다른 방법이 있을 수행 내에서 이기는 나는 생각하지 않습니까?

도움이 되었습니까?

해결책

CouchDB 뷰 지원하지 않는 다면 검색하거나 또는 전체 텍스트 검색 결과이다.이 couchdb-루씬 플러그인을 하시는 모든 이러한 것들입니다.

http://github.com/rnewson/couchdb-lucene/tree/master

다른 팁

기술적으로 이것이 가능한 경우에 당신은 방출에 대한 각각의 문서 각각 설정의 powerset 의 범주로 문서의 열쇠이다.키 설정된 요소를 주문해야 합 및 쿼리 whould 쿼리가 태그를 주문,too.

function map(doc) {
  function powerset(array) { ... }

  powerset_of_tags = powerset(doc.tags)
  for(i in powerset_of_tags) {
    emit(powerset_of_tags[i], doc);
  }
}

에 대한 문서 {"hello_world" : {"id":123, "tags":["hello", "world"], "text":"Hello World"} 이 방출 것:

{ key: [], doc: ... }
{ key: ['hello'], doc: ... }
{ key: ['world'], doc: ... }
{ key: ['hello', 'world'], doc: ... }

하지만 이것이 가능한 것이 오히려자의 의견을 더욱 쉽게 확인 솔루션입니다.지 상상하고 싶은 디스크의 사용을 보기 위해 더 큰 숫자 태그가 있습니다.나는 예수의 방출되는 열쇠 성장하는 다음과 같 2^n.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top