PHPackages                             lca/elasticsearch - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. lca/elasticsearch

AbandonedArchivedProject[Search &amp; Filtering](/categories/search)

lca/elasticsearch
=================

Php Elasticsearch Project Development Practice

12TSQL

Since Jul 2Pushed 6y agoCompare

[ Source](https://github.com/huazaili/PHP-Elasticsearch)[ Packagist](https://packagist.org/packages/lca/elasticsearch)[ RSS](/packages/lca-elasticsearch/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (1)Used By (0)

PHP-Elasticsearch
=================

[](#php-elasticsearch)

PHP中使用Elasticsearch

PHP基于elasticsearch全文搜索引擎的开发 1.概述： 全文搜索属于最常见的需求，开源的 Elasticsearch （以下简称 Elastic）是目前全文搜索引擎的首选。Elastic 的底层是开源库 Lucene。但是，你没法直接用 Lucene，必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装，提供了 REST API 的操作接口，开箱即用。Elasticsearch中涉及到的重要概念

1）Cluster：集群。 ES可以作为一个独立的单个搜索服务器。不过，为了处理大型数据集，实现容错和高可用性，ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2）Node：节点。 形成集群的每个服务器称为节点。

3）Shard：分片。 当有大量的文档时，由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等，一个节点可能不够。这种情况下，数据可以分为较小的分片。每个分片放到不同的服务器上。 当你查询的索引分布在多个分片上时，ES会把查询发送给每个相关的分片，并将结果组合在一起，而应用程序并不知道分片的存在。即：这个过程对用户来说是透明的。

4）Replia：副本。 为提高查询吞吐量或实现高可用性，可以使用分片副本。 副本是一个分片的精确复制，每个分片可以有零个或多个副本。ES中可以有许多相同的分片，其中之一被选择更改索引操作，这种特殊的分片称为主分片。 当主分片丢失时，如：该分片所在的数据不可用时，集群将副本提升为新的主分片。

5）全文检索。 全文检索就是对一篇文章进行索引，可以根据关键字搜索，类似于mysql里的like语句。 全文索引就是把内容根据词的意义进行分词，然后分别创建索引，例如”你们的激情是因为什么事情来的” 可能会被分词成：“你们“，”激情“，“什么事情“，”来“ 等token，这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

好了，本文主要讲Elasticsearch环境搭建，以及中文分词的用法。下面讲Elasticsearch环境搭建以及使用。

2.环境搭建 1.安装 JAVA JDK 8

sudo apt-get update sudo apt-get install openjdk-8-jre 查看jdk安装信息：

2.下载最新的 elasticsearch安装包： wget tar -zxvf elasticsearch-6.6.2.tar.gz cd elasticsearch-6.6.2 启动 ./bin/elasticsearch 启动会打印启动的包信息：

3. 安装IK中文分词插件. 在ik分词的git()上找到相应的ES对应的版本：

我这里安装的是最新的版本6.6.2：

看到上面的信息，那么我们的环境就搭建 好了。

3.使用。 我本地建立一张书本信息表，里面4个字段，其中attr\_text是英文存储的，其他几个字段是中文

接下来创建索引：

先设置索引参数：

$params = \[

 'index' =&gt; 'douban',

 'body' =&gt; \[

 'settings' =&gt; \[

 'number\_of\_shards' =&gt; 3,

 'number\_of\_replicas' =&gt; 2,

 'analysis' =&gt; \[

 'filter' =&gt; \[

 "ngram\_filter" =&gt; \[

 "type" =&gt; "ngram",

 "min\_gram" =&gt; 2,

 "max\_gram" =&gt; 20

 \]

 \],

 'analyzer' =&gt; \[

 "ngram\_analyzer" =&gt; \[

 "type" =&gt; "custom",

 "tokenizer" =&gt; "whitespace",

 "filter" =&gt; \[

 "lowercase",

 "asciifolding",

 "ngram\_filter"

 \]

 \]

 \]

 \]

 \],

 'mappings' =&gt; \[

 'dd\_book' =&gt; \[

 '\_source' =&gt; \[

 'enabled' =&gt; true

 \],

 'properties' =&gt; \[

 'book\_name' =&gt; \[

 'type' =&gt; 'text',

 'analyzer' =&gt; 'ik\_max\_word',

 'search\_analyzer' =&gt; 'ik\_max\_word',

 \],

 'book\_author' =&gt; \[

 'type' =&gt; 'text',

 'analyzer' =&gt; 'ik\_max\_word',

 'search\_analyzer' =&gt; 'ik\_max\_word',

 \],

 'book\_desc' =&gt; \[

 'type' =&gt; 'text',

 'analyzer' =&gt; 'ik\_max\_word',

 'search\_analyzer' =&gt; 'ik\_max\_word',

 \],

 'attr\_text' =&gt; \[

 'type' =&gt; 'text',

 'analyzer' =&gt; 'ngram\_analyzer',

 'search\_analyzer' =&gt; 'standard',

 \],

 \]

 \]

 \]

 \]

\];

其中book\_name，book\_author，book\_desc都中文，使用了中文分词器IK分词器。attr\_text是英文的，所以使用ngram分词器(elasticsearch自带的分词器)

接下来我们创建索引：

php createDoubanIndex.php

看到已经创建完成

紧接着我们把mysql的书本信息表数据生成索引数据：

php insertDataToEs.php

好了，以上准备工作已经做完了

###  Health Score

18

—

LowBetter than 8% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/3a89a65f85c09704e0a8d431bfeeef57ba0bbeaa576de30416346af9b6357cd7?d=identicon)[huazaili](/maintainers/huazaili)

---

Top Contributors

[![huazaili](https://avatars.githubusercontent.com/u/13534495?v=4)](https://github.com/huazaili "huazaili (1 commits)")

### Embed Badge

![Health badge](/badges/lca-elasticsearch/health.svg)

```
[![Health](https://phpackages.com/badges/lca-elasticsearch/health.svg)](https://phpackages.com/packages/lca-elasticsearch)
```

###  Alternatives

[ruflin/elastica

Elasticsearch Client

2.3k50.4M203](/packages/ruflin-elastica)[opensearch-project/opensearch-php

PHP Client for OpenSearch

15024.3M65](/packages/opensearch-project-opensearch-php)[mailerlite/laravel-elasticsearch

An easy way to use the official PHP ElasticSearch client in your Laravel applications.

934529.3k2](/packages/mailerlite-laravel-elasticsearch)[massive/search-bundle

Massive Search Bundle

721.4M13](/packages/massive-search-bundle)[shyim/opensearch-php-dsl

OpenSearch/Elasticsearch DSL library

175.9M9](/packages/shyim-opensearch-php-dsl)[outl1ne/nova-multiselect-filter

Multiselect filter for Laravel Nova.

45802.7k3](/packages/outl1ne-nova-multiselect-filter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
