How to use PHP Elasticsearch to achieve full-text search highlighting?
Abstract: This article will introduce how to use the PHP Elasticsearch library to implement highlighting of full-text search. We'll cover how to set up highlighted fields, how to perform a full-text search, and how to get highlighted results.
Elasticsearch is a powerful open source search engine that can efficiently handle large-scale full-text searches. PHP Elasticsearch is a PHP library that interacts with Elasticsearch and provides rich APIs and functions.
First, make sure you have installed the PHP Elasticsearch library. It can be installed through Composer, or downloaded from the official website and installed manually.
Before you begin, you need to create an Elasticsearch index and add some data to it. These operations can be accomplished using Elasticsearch's RESTful API or other tools.
The following is a simple example showing how to create an index (named "my_index") and add some data:
require 'vendor/autoload.php'; use ElasticsearchClientBuilder; $client = ClientBuilder::create()->build(); $params = [ 'index' => 'my_index', 'body' => [ [ 'title' => 'Title 1', 'content' => 'This is the content of document 1.' ], [ 'title' => 'Title 2', 'content' => 'This is the content of document 2.' ], [ 'title' => 'Title 3', 'content' => 'This is the content of document 3.' ] ] ]; $client->index($params);
Next, we need to set which fields need to be highlighted . When searching, we will use Elasticsearch’s highlight
parameter to achieve highlighting. The following is an example of setting a highlighted field:
$searchParams = [ 'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'content' => 'search keyword' ] ], 'highlight' => [ 'fields' => [ 'content' => new stdClass() ] ] ] ]; $response = $client->search($searchParams);
In the above code, we set the content
field to be highlighted. When performing a search, Elasticsearch will include data from the highlighted fields in the returned results.
Finally, we need to get the highlighted results from the search results and display them in a suitable format. The following is an example of obtaining and displaying highlighted results:
foreach ($response['hits']['hits'] as $hit) { $highlight = $hit['highlight']; echo 'Title: ' . $hit['_source']['title'] . '<br>'; echo 'Content: '; if (isset($highlight['content'])) { echo implode(' ... ', $highlight['content']); } else { echo $hit['_source']['content']; } echo '<hr>'; }
In the above code, we use a foreach loop to traverse each record in the search results. We first print out the title, and then determine whether the highlighted content needs to be printed based on the highlighting results. If there are highlighted results, use the implode function to merge the highlighted result arrays into strings; if there are no highlighted results, print the original content directly.
So far, we have successfully implemented the highlighting of full-text search using the PHP Elasticsearch library. You can improve and extend the code according to your needs.
Summary: This article introduces how to use the PHP Elasticsearch library to implement highlighting of full-text search. We walk through the entire process in detail, through the steps of creating an index, adding data, setting up highlighted fields, performing a search, and getting highlighted results. I hope this article is helpful to you and can successfully fulfill your search needs.
The above is the detailed content of How to achieve full text search highlighting using php Elasticsearch?. For more information, please follow other related articles on the PHP Chinese website!