레일스에서 다시 검색하기

Rails를 사용하는 경우 캐시, ActionCable, Active Job 등 Redis를 사용하여 작업을 수행하고 있을 수 있습니다.그렇다면 왜 그것을 다른 일에 쓰지 않습니까?
Redis의 v4부터 Redis 모듈을 도입했습니다. 이 모듈들은 Redis의 기능을 확장하기 위해 구축된 추가 구성 요소입니다.첫 번째 모듈 중 하나는 Redi Search입니다. Redis 위에 설치된 텍스트 검색 엔진입니다.기준 RediSearch.io:

Unlike other Redis search libraries, it does not use the internal data
structures of Redis like sorted sets. Using its own highly optimized data
structures and algorithms, it allows for advanced search features, high
performance, and low memory footprint. It can perform simple text searches, as
well as complex structured queries, filtering by numeric properties and
geographical distances. RediSearch supports continuous indexing with no
performance degradation, maintaining concurrent loads of querying and
indexing. This makes it ideal for searching frequently updated databases,
without the need for batch indexing and service interrupts.


RedSearch의 일부 제목 피쳐는 다음과 같습니다.
  • 문서의 여러 필드에 대한 전체 텍스트 인덱스:
  • 정확한 단어가 일치합니다.
  • 여러 언어 중의 어간.
  • 접두사 조회.
  • 옵션, 부정 및 공동 검색
  • 수십억 개의 문서를 분산 검색합니다.
  • 수치 특성 인덱스.
  • 지리적 인덱스 및 반지름 필터
  • 성능 손실이 없는 증량 인덱스.
  • 모호하게 일치하는 강력한 자동 완성 엔진을 가지고 있다.
  • 파일의 병렬 지연 삽입과 업데이트.
  • benchmark ElasticSearch 대상!
  • 다시 검색을 Rails 애플리케이션에 통합하는 방법을 살펴보겠습니다.
    먼저 Redis 및 RedSearch 설치부터 시작합니다.Redis의 전체 설치 지침을 보려면 Redis.io 을 참조하십시오.자체 제작 소프트웨어가 있으면 brew install redis 할 수 있습니다.v1.6부터 다시 검색을 구성하려면 다음과 같이 하십시오.
  • git 클론https://github.com/RediSearch/RediSearch.git
  • cd 다시 검색
  • 브랜드
  • RediSearch가 구축되면 Redis에 모듈을 로드하라고 알려야 합니다.가장 좋은 방법은 loadmodule /path/to/redisearch.so를redis에 추가하는 것입니다.conf 파일은 항상 모듈을 불러옵니다.(macOS에서 redis.conf 파일은 /usr/local/etc/redis.conf에 있습니다.conf 파일을 업데이트한 후 Redis를 다시 시작합니다.RedSearch 설치에 대한 자세한 내용은 를 참조하십시오RediSearch.io.
    또는 Docker와 함께 Redis 및 RedSearch를 실행할 수 있습니다.
    Redis 및 RedSearch를 설치한 후 gem 파일에 docker run -p 6379:6379 redislabs/redisearch:latestgem을 추가합니다.
    gem 'redi_search'
    
    그리고 실행redi_search.GitHub package registry에서도 설치할 수 있습니다.
    설치 후, Redis 연결을 설정하기 위해 초기값 설정 항목을 만들어야 합니다.
    # config/initializers/redi_search.rb
    RediSearch.configure do |config|
      config.redis_config = {
        host: "127.0.0.1",
        port: "6379"
      }
    end
    
    현재 우리의 응용 프로그램에 다시 검색이 있어서, 그것으로 색인 모델을 만들 수 있습니다.우리는 bundle installUser 속성을 가진 first 모델을 예로 사용할 것이다.
    class User < ApplicationRecord
      redi_search schema: {
        first: { text: { phonetic: "dm:en" } },
        last: { text: { phonetic: "dm:en" } }
      }
    end
    
    모델 내에서 last 클래스 방법을 호출하여 redi_search 라는 필수 명명 매개 변수를 받아들입니다.이것은 인덱스의 필드와 이 필드의 속성을 정의합니다.RedSearch에는 텍스트, 숫자, 지리적 위치 및 태그 필드가 있습니다.위에서 병음 옵션을 통과했습니다. 왜냐하면 우리는 이름을 색인하고 있기 때문입니다. 이것은 발음이 비슷하지만 맞춤법이 다른 이름을 검색하는 것을 더욱 쉽게 합니다.다양한 필드 유형의 사용 가능한 옵션의 전체 목록here을 찾을 수 있습니다.
    User.reindex
    
    모델 내에서 schema 클래스를 호출하는 방법에는 다음과 같은 두 가지 유용한 방법이 추가되었습니다.
  • 인덱스가 없으면 인덱스 만들기
  • 호출redi_search 역할 영역이 데이터베이스
  • 에서 모든 기록을 가져옵니다.
  • 이 기록을 다시 검색reindexs
  • 로 변환
  • 이 모든 문서를 Redis로 인덱싱
  • User.search("jak")
    
    현재 우리는 이미 모든 사용자를 위해 색인을 만들었으니, 우리는 그들을 검색하기 시작할 수 있다.쿼리는 ActiveRecord 인터페이스와 유사하며, 하위 문장과 조건을 연결할 수 있으며, 검색은 실행을 지연시킬 수 있습니다.​. 간단한 질의는 다음과 같습니다.
    # simple phrase query - jak AND daxter
    User.search("jak").and("daxter")
    
    # exact phrase query - jak FOLLOWED BY daxter
    User.search("jak daxter")
    
    # union query - jak OR daxter
    User.search("jak").or("daxter")
    
    # negation query - jak AND NOT daxter
    User.search("jak").and.not("daxter")
    
    더 복잡한 질의는 다음과 같습니다.
    # intersection of unions - (hello OR halo) AND (world OR werld)
    User.search(User.search("hello").or("halo")).and(User.search("world").or("werld"))
    # negation of union - hello AND NOT (world or werld)
    User.search("hello").and.not(User.search("world").or("werld"))
    # union inside phrase - hello AND (world OR werld)
    User.search("hello").and(User.search("world").or("werld"))
    
    모든 용어는 적용 가능한 옵션을 지원합니다.
    접두사 용어: 접두사로 시작하는 모든 용어와 일치합니다.(SQL과 유사search_import
    User.search("hel", prefix: true)
    User.search("hello worl", prefix: true)
    User.search("hel", prefix: true).and("worl", prefix: true)
    User.search("hello").and.not("worl", prefix: true)
    
    옵션 약관: 옵션 약관을 포함하는 문서 순위가 옵션 약관을 포함하지 않은 문서보다 높음
    User.search("foo").and("bar", optional: true).and("baz", optional: true)
    
    모호 항목: Levenshtein 거리에 따라 일치합니다.지원되는 최대 Levenshtein 거리는 3입니다.
    User.search("zuchini", fuzziness: 1)
    
    또한 Document 자구를 사용하여 검색어의 범위를 특정 필드로 제한할 수 있습니다.
    # Simple field specific query
    User.search.where(name: "john")
    # Using where with options
    User.search.where(first: "jon", fuzziness: 1)
    # Using where with more complex query
    User.search.where(first: User.search("bill").or("bob"))
    
    검색 숫자 필드의 범위는 다음과 같습니다.
    User.search.where(number: 0..100)
    # Searching to infinity
    User.search.where(number: 0..Float::INFINITY)
    User.search.where(number: -Float::INFINITY..0)
    
    검색할 때 기본적으로 like term% 의 집합을 반환합니다.검색 쿼리 호출 where 은 검색을 실행하고 데이터베이스에서 찾은 모든 기록을 찾아 ActiveRecord 관계식으로 되돌려줍니다.
    또 다른 유용한 방법Document#results 을 추가하고 맞춤법 오류 검색어에 대한 조언을 제공합니다.
    User.spellcheck("jimy")
      RediSearch (1.1ms)  FT.SPELLCHECK user_idx jimy DISTANCE 1
    => [#<RediSearch::Spellcheck::Result:0x00007f805591c670
        term: "jimy",
        suggestions:
         [#<struct RediSearch::Spellcheck::Suggestion score=0.0006849315068493151, suggestion="jimmy">,
          #<struct RediSearch::Spellcheck::Suggestion score=0.00019569471624266145, suggestion="jim">]>]
    User.spellcheck("jimy", distance: 2).first.suggestions
      RediSearch (0.5ms)  FT.SPELLCHECK user_idx jimy DISTANCE 2
    => [#<struct RediSearch::Spellcheck::Suggestion score=0.0006849315068493151, suggestion="jimmy">,
     #<struct RediSearch::Spellcheck::Suggestion score=0.00019569471624266145, suggestion="jim">]
    
    다음에 검색엔진을 찾으실 때 Red Search를 사용해 보세요!더 많은 옵션을 읽고 자술한 파일에서 더 많은 예제를 볼 수 있습니다.

    npezza93 / redi\u 검색


    Ruby는 Rails와 통합할 수 있는 재검색을 포장했습니다.



    다시 검색




    RedSearch는 단순하지만 강력한 Ruby 패키지로,
    Redis.

    설치


    먼저 Redis 및 RedSearch를 설치해야 합니다.
    https://redis.io/download 에서 Redis를 다운로드하여 볼 수 있습니다.
    설치 지침
    here . 혹은
    macOS 또는 Linux는 자체 제작 소프트웨어를 통해 설치할 수 있습니다.
    설치 다시 검색 체크 아웃
    https://oss.redislabs.com/redisearch/Quick_Start.html
    재검색을 구축한 후 Docker를 사용하지 않으면 업데이트할 수 있습니다.
    redis.conf 파일은 항상 다시 검색 모듈을 불러옵니다.redi_search . (macOS에서 redis.conf 파일을 찾을 수 있습니다
    atspellcheck)
    Redis 및 RedSearch가 시작되고 실행되면 다음 줄을
    GEM 파일:
    gem "redi\u 검색"
    다음:
    ❯ 묶다
    또는 직접 설치:
    ❯ gem 설치 redi\u 검색
    요구 사항:
    "redi\u 검색"필요
    gem가 설치되어 필요하면 사용해야 합니다
    Redis 구성만약 네가 궤도에 있다면, 이것은 마땅히...
    View on GitHub

    좋은 웹페이지 즐겨찾기