Rumah > Artikel > pembangunan bahagian belakang > Carian kabur dan pelaksanaan carian semantik berdasarkan Elasticsearch dalam PHP
Pelaksanaan carian kabur dan carian semantik berdasarkan Elasticsearch dalam PHP memerlukan contoh kod khusus
Dalam persekitaran Internet moden, fungsi carian telah menjadi salah satu fungsi yang diperlukan untuk pelbagai aplikasi. Carian kabur tradisional selalunya hanya boleh melakukan padanan mudah berdasarkan kata kunci, tetapi kurang memahami niat pengguna. Carian semantik boleh menangkap niat pengguna dengan lebih baik dan memberikan hasil carian yang lebih tepat. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Elasticsearch untuk melaksanakan carian kabur dan carian semantik dalam PHP, dan memberikan contoh kod khusus.
Elasticsearch ialah enjin carian sumber terbuka berdasarkan Lucene, yang menyediakan fungsi carian yang kaya dan sokongan carian teragih yang cekap. Dalam PHP, kita boleh menggunakan perpustakaan pelanggan rasmi yang disediakan oleh Elasticsearch - Elasticsearch-PHP untuk berinteraksi dengan Elasticsearch.
Pertama, kita perlu memperkenalkan perpustakaan Elasticsearch-PHP ke dalam projek PHP. Ia boleh dipasang melalui Komposer. Anda hanya perlu menambah kebergantungan berikut pada fail composer.json dalam direktori akar projek:
{ "require": { "elasticsearch/elasticsearch": "^7.0" } }
Kemudian laksanakan perintah composer install
untuk memasang. composer install
命令进行安装。
接下来,我们需要与 Elasticsearch 建立连接。在 PHP 中,可以通过以下代码来实现:
<?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create() ->setHosts(['localhost:9200']) // 修改为 Elasticsearch 的地址和端口 ->build(); ?>
以上代码中的 localhost:9200
是 Elasticsearch 服务的地址和端口,默认情况下 Elasticsearch 监听地址为 localhost,端口为 9200。如果 Elasticsearch 运行在其他机器上或者端口不同,需要修改为相应的值。
现在,我们可以开始实现模糊搜索的功能了。以下是一个简单的例子:
<?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create() ->setHosts(['localhost:9200']) ->build(); $params = [ 'index' => 'my_index', 'body' => [ 'query' => [ 'match' => [ 'title' => [ 'query' => '搜索关键字', 'fuzziness' => 'AUTO', ], ], ], ], ]; $response = $client->search($params); foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . " "; } ?>
以上代码中的 my_index
是 Elasticsearch 中的一个索引,title
是一个字段名。我们通过 match
查询来进行模糊搜索,利用 fuzziness
参数来设置模糊匹配的程度。AUTO
表示让 Elasticsearch 自动判断模糊匹配程度。
当然,如果需要更加复杂的搜索功能,还可以使用 Elasticsearch 提供的其他查询类型,比如 multi_match
、bool
等。具体的使用方法可以参考 Elasticsearch 的官方文档。
接下来,我们将介绍如何实现语义搜索的功能。为了实现语义搜索,我们需要借助一个叫做 Elasticsearch 的插件——Elasticsearch Elasticsearch-Elasticsearch-DSL。该插件提供了可以通过 PHP 构建复杂查询的 DSL(Domain Specific Language)。
首先,我们需要修改 composer.json 文件,添加以下依赖:
{ "require": { "elasticsearch/elasticsearch": "^7.0", "elastic/elasticsearch-dsl": "^8.0" } }
然后执行 composer install
命令进行安装。
接下来,我们可以使用 Elasticsearch-Elasticsearch-DSL 来构建语义查询。以下是一个简单的例子:
<?php require 'vendor/autoload.php'; use ElasticsearchClientBuilder; use ElasticsearchDSLSearch; $client = ClientBuilder::create() ->setHosts(['localhost:9200']) ->build(); $search = new Search(); $search->addQuery( (new ElasticsearchElasticsearchDSLQueryMultiMatchQuery('搜索关键词', ['title', 'content'])) ->setFuzziness('AUTO') ); $params = [ 'index' => 'my_index', 'body' => $search->toArray(), ]; $response = $client->search($params); foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . " "; } ?>
以上代码中的 title
和 content
是 Elasticsearch 中的字段名,我们通过 MultiMatchQuery
rrreee
localhost:9200
dalam kod di atas ialah alamat dan port perkhidmatan Elasticsearch Secara lalai, alamat pendengaran Elasticsearch ialah localhost dan port ialah 9200. Jika Elasticsearch dijalankan pada mesin lain atau port berbeza, ia perlu diubah suai kepada nilai yang sepadan. 🎜🎜Kini, kita boleh mula melaksanakan fungsi carian kabur. Berikut ialah contoh mudah: 🎜rrreee🎜 my_index
dalam kod di atas ialah indeks dalam Elasticsearch dan title
ialah nama medan. Kami melakukan carian kabur melalui pertanyaan padan
dan menggunakan parameter fuzziness
untuk menetapkan tahap padanan kabur. AUTO
bermaksud membenarkan Elasticsearch menentukan secara automatik tahap padanan kabur. 🎜🎜Sudah tentu, jika anda memerlukan fungsi carian yang lebih kompleks, anda juga boleh menggunakan jenis pertanyaan lain yang disediakan oleh Elasticsearch, seperti multi_match
, bool
, dsb. Untuk kaedah penggunaan khusus, sila rujuk kepada dokumentasi rasmi Elasticsearch. 🎜🎜Seterusnya, kami akan memperkenalkan cara melaksanakan fungsi carian semantik. Untuk melaksanakan carian semantik, kita perlu menggunakan pemalam yang dipanggil Elasticsearch-Elasticsearch Elasticsearch-Elasticsearch-DSL. Pemalam ini menyediakan DSL (Bahasa Khusus Domain) yang boleh membina pertanyaan kompleks melalui PHP. 🎜🎜Mula-mula, kita perlu mengubah suai fail composer.json dan menambah kebergantungan berikut: 🎜rrreee🎜 Kemudian laksanakan perintah composer install
untuk memasangnya. 🎜🎜Seterusnya, kita boleh menggunakan Elasticsearch-Elasticsearch-DSL untuk membina pertanyaan semantik. Berikut ialah contoh mudah: 🎜rrreee🎜MultiMatchQuery
Pertanyaan berbilang medan dengan darjah set padanan kabur. 🎜🎜Melalui contoh kod di atas, kita boleh menggunakan Elasticsearch untuk melaksanakan carian kabur dan fungsi carian semantik dalam PHP. Sudah tentu, dalam senario perniagaan sebenar, fungsi carian boleh dioptimumkan lagi dan dikembangkan untuk mencapai hasil carian yang lebih tepat dan cekap. Harap artikel ini membantu anda! 🎜Atas ialah kandungan terperinci Carian kabur dan pelaksanaan carian semantik berdasarkan Elasticsearch dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!