복붙노트

[MONGODB] 여러 언어를 사용하여 MongoDB를 텍스트 검색

MONGODB

여러 언어를 사용하여 MongoDB를 텍스트 검색

나는 두 개의 필드가 컬렉션이

{
name : 'text English',
descr: 'Texto largo en español'
}

나는 이름을 더 선호와, 다중 언어 검색을 만들고 싶습니다. 지금은 이런 일을하고 있었다까지 업 :

db.items.ensureIndex({
        name : "text",
        descr : "text"
    },{
        default_language: "spanish",
        name : "searchIndex",
        weights : {
            name : 3,
            descr: 1
        }
    }
)

문제는 스페인어로 모든 것을 처리하는 것입니다. 설명서에 보면 나는 그들이 완전히 다른 스키마를 사용하는 것을 발견했다. 내가 원하는 것을 달성하기 위해 어떤 생각이 있습니까?

해결법

  1. ==============================

    1.당신은 특히 의미 : http://docs.mongodb.org/manual/tutorial/create-text-index-on-multi-language-collection/#use-any-field-to-specify-the-language-for-a -document 난 당신이 특정 필드의 값을 전체 문서의 언어를 대체 할 수있는 가정합니다.

    당신은 특히 의미 : http://docs.mongodb.org/manual/tutorial/create-text-index-on-multi-language-collection/#use-any-field-to-specify-the-language-for-a -document 난 당신이 특정 필드의 값을 전체 문서의 언어를 대체 할 수있는 가정합니다.

    당신이 당신의 질문에서 원하는 무엇을, 당신은 MongoDB를 아직 할 수는 없지만,이 기능은 MongoDB를의 향후 버전 예정입니다. 당신은 https://jira.mongodb.org/browse/SERVER-9390에서 티켓을 추적 할 수 있습니다

  2. ==============================

    2.링크는 질문 주어진 원래의 대답에서 모두 죽은하지만 현대 버전에서 지원되는이에 대한 스키마를 정의하는 방법이있다.

    링크는 질문 주어진 원래의 대답에서 모두 죽은하지만 현대 버전에서 지원되는이에 대한 스키마를 정의하는 방법이있다.

    권장되는 방법은 다음 속성이 텍스트 인덱스에 사용되는에 문서 또는 포함 된 문서에서 "언어"속성을 포함하는 것입니다. 인덱스의 속성 즉 인접한 "동일한 레벨"의 의미 '옆 "이 아닌 용어.

    뭔가 일반적인 같을 것이다 :

    {
      "description": "Texto largo en español",
      "language": "spanish",
      "translation": [
        {
          "description": "Large text in Spanish",
          "language": "english"
        },
        {
          "description": "Grand texte en espagnol",
          "language": "french"
        }
      ]
    },
    {
      "description": "The quick brown fox",
      "translation": [
        {
          "description": "Le renard brun rapide",
          "language": : "french"
        }
      ]
    }
    

    그리고 우리가 "영어"우리가 할 수 단순히 인덱스의 "기본"텍스트 인덱스 언어를 사용하는 것이 추정 :

    db.collection.createIndex({ "description": "text", "translation.description": "text" })
    

    두 문서 "루트"또는 배열에서 "포함 된 문서"에서 표시, 생략 곳 단순히 인덱스에 대해 정의 된 기본값을 사용하므로 MongoDB를 다음 "언어"속성을 사용합니다. 예를 들어 두 번째 문서는 여기 인덱스의 기본이기 때문에 추정된다 "루트"그래서 "영어"에는 언어 속성이 없습니다.

    필요 인덱스 항목은 또한 제 1 샘플 문서에서 포함 된 문서와 "번역"내부 배열 "영어"엔트리를 가짐으로써 입증 순서에 상관 없다. 약간 우리가 포함 된 문서에서 "언어"속성 또는 문서 "루트"에서 해당 일에 사용되는 실제 언어를 포함해야 임베디드 항목 다릅니다에 대한 규칙. 이 예에서 "언어"속성없이 배열의 임베디드 문서는 그 "루트"에 정의되어 무엇 때문에 "스페인어"사용하는 것으로 간주됩니다.

    검색은 물론 모든 인덱스에 존재하는 모든 경로를 고려하여 수행의 그래서 "설명"여기에 정의 된 임베디드 "translation.description"속성 모두에서. "중지 단어"여전히 이와 관련 및 인덱스 생성시 기본 색인 언어 설정에 고려된다 "형태소 분석"과 같이 $ 텍스트 연산자에 $ 언어 옵션으로 지정된 적절한 "검색 언어는"여전히 항상 사용됩니다.

    내장 형식은 또한 당신에게 당신이 문제의 두 언어에 대해 정의 된 내용이 두 언어 사이에 "번역"언어 정보를 검색 할 수있는 쉬운 포인트를 제공, 그것의 실용성이 경우에 "두 배"그래서.

    특정 문서는 이제 인덱스에 다른 기본 언어를 지정을 포함하여 다른 모든 세부 사항에 대한 링크를 포함 텍스트 인덱스의 언어를 지정의 폭 넓은 주제 내에서 섹션으로 여러 언어의 컬렉션 텍스트 색인 만들기에 있습니다.

  3. from https://stackoverflow.com/questions/18065196/mongodb-text-search-using-multiple-languages by cc-by-sa and MIT license