>  기사  >  백엔드 개발  >  PHP redis를 사용한 초소형 전체 텍스트 검색 코드 예제에 대한 자세한 소개

PHP redis를 사용한 초소형 전체 텍스트 검색 코드 예제에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-06 09:25:451430검색

이 기사에서는 초소형 전체 텍스트 검색을 구현하기 위한 PHP redis 관련 정보를 주로 소개합니다. 관심 있는 친구는

시나리오를 참조할 수 있습니다. 우리 플랫폼에는 많은 게임이 있습니다. 운영 동료가 특정 게임을 쿼리할 때 현재는 html 선택 드롭다운 목록 표시 형식을 사용하고 있습니다.

효과: "삼국지" 또는 "삼국지"를 입력하면 "삼국지"가 포함된 모든 게임 이름이 자동으로 나열되며 입력 순서는 제한되지 않습니다. 예를 들어, "Kill Three Kingdoms"를 입력하면 결과는 여전히 "Three Kingdoms" 게임을 찾을 것입니다.

구현: redis 컬렉션 + PHP의 array_intersect()를 사용하고 mb 시리즈 기능으로 초소형 전문 검색 기능 구현

원리: (진실은 두세 단어만 있어도 진실을 말하면 한 푼도 아깝지 않죠, 하하)

1. 모든 게임 이름을 읽어서 개별 한자로 나눕니다

2. 이 한자를 redis 컬렉션의 키로 사용하고 각각의 값을 씁니다. collection은 이름에 이 한자가 포함된 모든 게임의 ID입니다.

3. 사용자가 입력할 때 텍스트를 작성할 때 ajax 비동기 요청을 통해 사용자 입력을 전달합니다

4. 개별 한자에 텍스트를 입력하고 각각 redis에서 해당 한자의 설정된 값을 찾습니다

5. 꺼내서 교차점을 찾고 에서 이 한자가 포함된 게임의 ID를 찾습니다. 동시에

6. 마지막으로 데이터베이스에 가서 해당 게임 정보를 찾습니다

단점: 데이터 삭제가 불편함

PHP 코드 Redis에 쓰기 및 검색:


//自动补全
  //不限输入汉字的前后顺序: 输入"国三杀" => 输出 "三国杀"
  function getAutoComplate()
  {
    //$word = $this->input->post('word');
    $word = '三国';
    if (empty($word)) {
      exit('0');
    }
    $intWordLength = mb_strlen($word, 'UTF-8');

    $this->load->library('iredis');
    if (1 == $intWordLength) {
      $arrGid = $this->iredis->getAutoComplate($word);
    } else {
      $arrGid = array();
      for ($i=0; $i < $intWordLength; $i++) {
        $strOne = mb_substr($word, $i, 1, &#39;UTF-8&#39;);
        $arrGidTmp = $this->iredis->getAutoComplate($strOne);
        $arrGid = empty($arrGid) ? $arrGidTmp : array_intersect($arrGid, $arrGidTmp); //求交集,因为传入的参数个数不确定,因此不能直接求交集
      }
    }

    $arrGame = $this->gamemodel->getGameNameForAutoComplate($arrGid);
    // var_dump($arrGame);exit;
    $jsonGame = json_encode($arrGame);
    exit($jsonGame);
  }

  //自动补全, 建立索引
  function setAutoComplate()
  {
    $arrGame = $this->gamemodel->getAllGameNameForAutoComplate();
    $arrIndex = array();
    foreach ($arrGame as $gid => $gname) {
      $intGnameLength = mb_strlen($gname, &#39;UTF-8&#39;);
      for ($i=0; $i < $intGnameLength; $i++) {
        $strOne = mb_substr($gname, $i, 1, &#39;UTF-8&#39;);
        $arrIndex[$strOne][] = $gid;
      }
    }
    
    $this->load->library(&#39;iredis&#39;);
    foreach ($arrIndex as $word => $arrGid) {
      foreach ($arrGid as $gid) {
        $this->iredis->setAutoComplate($word, $gid);
      }
    }
    
  }

Redis 작동 방법


//自动补全功能
  public function setAutoComplate($key, $value)
  {
    $youxikey = &#39;youxi_&#39;.$key;
    $this->sAdd($youxikey, $value);
  }

  //自动补全功能
  public function getAutoComplate($key)
  {
    $youxikey = &#39;youxi_&#39;.$key;
    return $this->sMembers($youxikey);
  }

위는 초소형 전체 텍스트 검색 코드 예제의 PHP redis 구현에 대한 자세한 소개입니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php .cn)를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.