복붙노트

[MONGODB] MongoDB의 일치는 기본이되는 문자와 같은 문자를 악센트

MONGODB

MongoDB의 일치는 기본이되는 문자와 같은 문자를 악센트

MongoDB의에서 "db.foo.find ()"구문은, 어떻게 모든 문자와 그 악센트 버전에 맞게 그것을 알 수 있습니까?

예를 들어, 내 데이터베이스에 이름 목록이있는 경우 : 주앙 프랑수아 예수

어떻게 문자열 "후앙", "프랑소와"또는 "예수"에 대한 검색 지정된 이름과 일치 할 수 있도록 것인가? 나는이 때마다 같은 검색을 할 필요가 없습니다 바라고 : db.names.find ({상품명 : /Fr[aã...][nñ][cç][all 문자 O를 강조] 모든 I 액센트 문자] S /})

해결법

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

    1.MongoDB를 3.2으로, 당신은 $ 텍스트를 사용하고 false로 $ 발음 구별 민감한를 설정할 수 있습니다 :

    MongoDB를 3.2으로, 당신은 $ 텍스트를 사용하고 false로 $ 발음 구별 민감한를 설정할 수 있습니다 :

    {
      $text:
        {
          $search: <string>,
          $language: <string>,
          $caseSensitive: <boolean>,
          $diacriticSensitive: <boolean>
        }
    }
    

    몽고의 문서에서 더 많은 참조 : https://docs.mongodb.com/manual/reference/operator/query/text/

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

    2.나는 예를 들어, 당신이 단순 문자열의 NameSearchable 같은 인덱스 필드를 추가 제안

    나는 예를 들어, 당신이 단순 문자열의 NameSearchable 같은 인덱스 필드를 추가 제안

    검색 할 때 데이터베이스에 새 항목을 삽입 할 때 사용되는 동일한 매핑을 사용할 수 있습니다. 케이싱 정확한 액센트 원래 문자열은 보존 될 것이다.

    가장 중요한 것은, 쿼리는 인덱스를 사용할 수있다. 대소 문자를 구분하지 쿼리와 정규식 쿼리 (뿌리 정규식 등에서 특정 요소를 뽑아 오기 제외) 인덱스를 사용할 수없는 큰 컬렉션에 엄청나게 느리게 성장할 것입니다.

    단순화 된 문자열이 원래 문자열을 만들 수 있습니다 아, 그리고 이후, 그것은 기존 컬렉션에이를 추가 할 수있는 문제가 아니다.

  3. ==============================

    3.이 블로그에서 : http://tech.rgou.net/en/php/pesquisas-nao-sensiveis-ao-caso-e-acento-no-mongodb-e-php/

    이 블로그에서 : http://tech.rgou.net/en/php/pesquisas-nao-sensiveis-ao-caso-e-acento-no-mongodb-e-php/

    누군가가 당신이하려고 한 접근 방식을 사용했다. 이것은 지금까지 내가 최신 MongoDB의 버전에 대한 유일한 해결책을 알고있다.

  4. ==============================

    4.그것은 더 MongoDB를 현재 지원하지 않는 퍼지 매칭 검색처럼 보인다. 당신이 시도 할 수 있습니다 것은 :

    그것은 더 MongoDB를 현재 지원하지 않는 퍼지 매칭 검색처럼 보인다. 당신이 시도 할 수 있습니다 것은 :

    /1. 각 항목에 대해 컬렉션에 별도의 요소 이름의 변화를 저장합니다. 그런 다음 쿼리는 검색 용어가 변화 배열 내에 존재하는 경우 찾아 실행할 수 있습니다.

    또는

    / 2. 같은 컬렉션의 이름을 각각 저장 사운 덱스 문자열입니다. 그런 다음 검색 문자열를 들어, SOUNDEX 문자열을 얻고, 데이터베이스를 쿼리, 당신은 당신의 쿼리와 유사한 Soundex와 결과를 가지고 결과를 얻을 것이다. 필터링하고 스크립트에 더 많은 데이터를 확인할 수 있습니다. 예 :

    프랑수아 = F652에 대한 SOUNDEX 코드, SOUNDEX 코드에 대한 프랑소와 = F652

    예수 = J220 예수 = J220, SOUNDEX 코드에 대한 사운 덱스 코드

    자세한 내용은 여기를 확인하십시오 http://creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm#SoundExConverter

  5. from https://stackoverflow.com/questions/7707671/mongodb-match-accented-characters-as-underlying-character by cc-by-sa and MIT license