>백엔드 개발 >PHP 튜토리얼 >PHP Elasticsearch의 기본 사용법

PHP Elasticsearch의 기본 사용법

小云云
小云云원래의
2018-05-18 10:21:2136719검색

Elasticsearch 및 Elasticsearch-php 설치에 대한 튜토리얼은 인터넷에 많이 있으므로 여기서는 자세히 다루지 않겠습니다. Elasticsearch, Elasticsearch-php 및 php의 버전에 주의하세요. 여기서 저자는 다음과 같이 Elasticsearch 5.6.8 Windows 버전, php 5.6, php onethink 프레임워크(이하 ot), Elasticsearch-php Composer를 사용하고 있습니다. (PHP Composer 동영상 튜토리얼)

{  
    "require":{  
        "elasticsearch/elasticsearch" : "~5.0"  
    }  
}

강좌 추천→ : 《 Elasticsearch 전체 텍스트 검색 실습》(실습 동영상)

강의 내용"수백만 개의 데이터 동시성 솔루션(이론 + 실습)"

1. Elasticsearch에 연결:

1 Elasticsearch를 활성화한 후 http://127.0.0.1:9200/을 통해 기본정보를 직접 보실 수 있습니다.

2. Composer Vendor 아래의 파일을 ThinkPHPLibraryVendorelasticsearch 디렉터리에 복사합니다.

3. Elasticsearch에 연결하세요.

    public $es;

    /**
     * 初始化
     */
    public function _initialize()
    {
        Vendor('elasticsearch.autoload');
        //host数组可配置多个节点
        $params = array(
            '127.0.0.1:9200'
        );
        $this->es = \Elasticsearch\ClientBuilder::create()->setHosts($params)->build();
    }

build() 메서드는 ClientBuilder 개체를 Client 개체로 변환합니다.

2. Elasticsearch-php 사용:

1. 인덱스 생성:

인덱스와 유형에 대해 특별한 수정 사항이 있습니다. 인덱스는 관계형 데이터베이스의 데이터베이스와 같고 유형은 데이터베이스의 테이블과 같습니다. 이해는 잘못입니다.

    /**
     * 创建索引
     */
    public function createIndex(){
        $params = [
            'index' => 'test', //索引名称
            'body' => [
                'settings'=> [ //配置
                    'number_of_shards'=> 3,//主分片数
                    'number_of_replicas'=> 1 //主分片的副本数
                ],
                'mappings'=> [  //映射
                    '_default_' => [ //默认配置,每个类型缺省的配置使用默认配置
                        '_all'=>[   //  关闭所有字段的检索
                            'enabled' => 'false'
                        ],
                        '_source'=>[   //  存储原始文档
                            'enabled' => 'true'
                        ],
                        'properties'=> [ //配置数据结构与类型
                            'name'=> [ //字段1
                                'type'=>'string',//类型 string、integer、float、double、boolean、date
                                'index'=> 'analyzed',//索引是否精确值  analyzed not_analyzed
                            ],
                            'age'=> [ //字段2
                                'type'=>'integer',
                            ],
                            'sex'=> [ //字段3
                                'type'=>'string',
                                'index'=> 'not_analyzed', 
                            ],
                        ]
                    ],
                    'my_type' => [ 
                        'properties' => [
                            'phone'=> [ 
                                'type'=>'string',
                            ],                            
                        ]
                    ],
                ],
            ]
        ];

        $res = $this->es->indices()->create($params);
    }

Elasticsearch-php API를 사용할 때 $params 매개변수는 일반적으로 배열 구조를 json으로 쉽게 변환할 수 있기 때문에 배열입니다. 그 중

_default_가 기본 구성이고, 그 외 구성의 기본값은 _default_와 동일합니다.

_all을 true로 설정하면 추가 저장을 위해 모든 원본 문서를 함께 연결합니다.

_source를 true로 설정하면 원본 문서를 저장합니다. false로 설정하면 일반적으로 문서의 제목이나 URL을 색인화하고 문서에 액세스해야 하는 경우에 사용됩니다. URL을 통해 문서의 내용을 ES에 저장해야 하는 시나리오입니다.

마지막으로, 동일한 인덱스 아래에 있는 다른 유형의 동일한 이름을 가진 필드의 데이터 유형 및 구성도 동일해야 한다는 점에 유의하세요!

2. 인덱스 삭제:

    /**
     * 删除索引
     */
     public function deleteIndex(){
        $params = [
            'index' => 'test'
        ];

        $res = $this->es->indices()->delete($params);
     }

3. 매핑 보기:

    public function getMappings(){
        $params = [
            'index' => 'test'
        ];

        $res = $this->es->indices()->getMapping($params);
    }

4. 매핑 수정:

    public function putMappings(){
        $params = [           
            'index' => 'test',
            'type' => 'my_type',
            'body' => [
                'my_type' => [
                    'properties' => [
                        'idcard' => [
                            'type' => 'integer'
                        ]
                    ]
                ]
            ]
        ]; 

        $res = $this->es->indices()->putMapping($params);      
    }

참고: 매핑 수정을 위한 API는 유형을 지정해야 하며, 기존 속성을 추가할 수만 있습니다.

5. 단일 문서 삽입:

    public function postSinDoc(){
        $params = [
            'index' => 'test',
            'type' => 'my_type',
            'body' => [ 
                'age' => 17,
                'name' => 'saki',
                'sex' => '女性',
                'idcard' => 1112,
                'phone' => '1245789',
            ]
        ];

        $res = $this->es->index($params);
    }

6. 여러 문서 삽입:

    public function postBulkDoc(){
        for($i = 0; $i < 5; $i++) {
            $params[&#39;body&#39;][] = [
                &#39;index&#39; => [
                    &#39;_index&#39; => &#39;test&#39;,
                    &#39;_type&#39; => &#39;my_type&#39;,
                ]
            ];

            $params[&#39;body&#39;][] = [
                &#39;age&#39; => 17+$i,
                &#39;name&#39; => &#39;reimu&#39;.$i,
                &#39;sex&#39; => &#39;女性&#39;,
                &#39;idcard&#39; => 1112+$i,
                &#39;phone&#39; => &#39;1245789&#39;.$i,
            ];
        }

        $res = $this->es->bulk($params);
    }

7. ID로 문서 가져오기:

    public function getDocById(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;id&#39; => &#39;AWIDV5l2A907wJBVKu6k&#39;
        ];

        $res = $this->es->get($params);
    }

9. :

    public function updateDocById(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;id&#39; => &#39;AWIDV5l2A907wJBVKu6k&#39;,
            &#39;body&#39; => [
                &#39;doc&#39; => [ //将doc中的文档与现有文档合并
                    &#39;name&#39; => &#39;marisa&#39;
                ]
            ]
        ];

        $res = $this->es->update($params);
    }

참고: id를 통한 위의 세 가지 작업에 대해 id를 찾을 수 없으면 Elasticsearch-php가 직접 오류를 보고합니다!

10. 검색 문서:

    public function deleteDocById(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;id&#39; => &#39;AWIDV5l2A907wJBVKu6k&#39;
        ];

        $res = $this->es->delete($params);
    }

이것은 검색의 예시일 뿐입니다.

관련 권장사항:

MySQL과 Elasticsearch 간의 데이터 비대칭 문제를 설명하는 자세한 예

Elasticsearch란 무엇인가요? Elasticsearch는 어디에 사용될 수 있나요?

Elasticsearch 인덱스 및 문서 작업 예제 튜토리얼

위 내용은 PHP Elasticsearch의 기본 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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