Heim  >  Artikel  >  Backend-Entwicklung  >  Grundlegende Verwendung von PHP Elasticsearch

Grundlegende Verwendung von PHP Elasticsearch

小云云
小云云Original
2018-05-18 10:21:2136693Durchsuche

Für die Installation von Elasticsearch und Elasticsearch-php gibt es viele Tutorials im Internet, daher werde ich sie hier nicht wiederholen. Achten Sie einfach auf die Versionen von Elasticsearch, Elasticsearch-php und php. Hier verwendet der Autor Elasticsearch 5.6.8 Windows-Version, PHP 5.6, PHP Onethink Framework (im Folgenden als OT bezeichnet) und Elasticsearch-php Composer wie folgt: (PHP Composer-Video-Tutorial)

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

Kursempfehlung →: "Elasticsearch Full Text Search Practical Combat" (Praxisvideo)

Aus dem Kurs "Zehn Lösung zur Datenkonkurrenz auf Millionenebene (Theorie + praktischer Kampf)》

1. Nachdem Elasticsearch geöffnet wurde Sie können direkt über http://127.0.0.1 :9200/ darauf zugreifen. Grundlegende Informationen anzeigen.

2. Kopieren Sie die Dateien unter Composer Vendor in das ThinkPHPLibraryVendorelasticsearch-Verzeichnis.

3. Stellen Sie eine Verbindung zu Elasticsearch her.

Die build()-Methode konvertiert das ClientBuilder-Objekt in ein Client-Objekt.

    public $es;

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

2. Elasticsearch-php-Nutzung:

1. Index erstellen:

In Bezug auf Index und Typ ist hier eine spezielle Korrektur Datenbank und Typ in relationalen Datenbanken sind wie Tabellen in einer Datenbank. Dieses Verständnis ist

falsch

. Bei Verwendung der Elasticsearch-php-API ist der Parameter $params normalerweise ein Array, da die Array-Struktur einfach in JSON konvertiert werden kann. Unter diesen ist

    /**
     * 创建索引
     */
    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);
    }
_default_ die Standardkonfiguration, und die Standardwerte anderer Konfigurationen sind dieselben wie _default_.

_all auf true gesetzt, werden alle Originaldokumente für zusätzlichen Speicher zusammengefügt.

_source auf true gesetzt, wird die Einstellung „false“ im Allgemeinen verwendet, wenn nur der Titel oder die URL des Dokuments verwendet wird Szenarien, in denen über die URL auf Dokumente zugegriffen wird, ohne dass eine Kopie des Dokumentinhalts in es gespeichert wird.

Beachten Sie abschließend, dass

der Datentyp und die Konfiguration von Feldern mit demselben Namen in verschiedenen Typen unter demselben Index auch gleich sein müssen

!

2. Index löschen:

3. Zuordnungen ändern:

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

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

Die API zum Ändern von Zuordnungen muss den Typ angeben und kann nur Attribute hinzufügen und keine vorhandenen Attribute ändern.

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

        $res = $this->es->indices()->getMapping($params);
    }
5. Fügen Sie ein einzelnes Dokument ein:

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

        $res = $this->es->indices()->putMapping($params);      
    }
6. Fügen Sie mehrere Dokumente ein:

7 >

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

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

9. Dokument nach ID löschen:
    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);
    }

Hinweis: Die oben genannten drei Vorgänge nach ID, wenn die ID nicht vorhanden ist gefunden, Elasticsearch-php meldet einen Fehler direkt!
    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);
    }

10. Dokument durchsuchen:

    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);
    }

Dies ist nur ein Beispiel für eine Suche.

    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);
    }
Verwandte Empfehlungen:

Eine detaillierte Erklärung des Datenasymmetrieproblems zwischen MySQL und Elasticsearch

    public function searchDoc(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;body&#39; => [
                &#39;query&#39; => [
                    &#39;constant_score&#39; => [ //非评分模式执行
                        &#39;filter&#39; => [ //过滤器,不会计算相关度,速度快
                            &#39;term&#39; => [ //精确查找,不支持多个条件
                                &#39;name&#39; => &#39;reimu0&#39;
                            ]
                        ]
                        
                    ]
                ]
            ]
        ];

        $res = $this->es->search($params);

Was ist Elasticsearch? Wo kann Elasticsearch eingesetzt werden?

Beispiel-Tutorial für Elasticsearch-Index und Dokumentbetrieb

Das obige ist der detaillierte Inhalt vonGrundlegende Verwendung von PHP Elasticsearch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn