Bài viết này mình sẽ hướng dẫn các bạn cải thiện tốc độ tìm kiếm nội bộ trong WordPress một cách hiệu quả chính xác hơn và nhanh chóng hơn mà còn miễn phí nữa.

Trong quá khứ mình có viết một bài viết chia sẻ về cải thiện tốc độ tìm kiếm WordPress bằng algolia và bản thân mình cũng đang gắn bỏ sử dụng algolia. Nhưng hôm nay mình sẽ chia sẻ về công cụ Elasticsearch một công cụ cũng cực kì mạnh mà còn miễn phí toàn tập nữa.
algolia thì hoạt động từ bên máy chủ bên thứ 3 còn Elasticsearch là tự lưu trữ vì vậy nó đốt sử dụng khá nhiều ram máy chủ.
Vì vậy nếu bạn muốn sử dụng Elasticsearch thì bạn cũng đầu tư dư giả ram thì hoạt động mới được trơn tru được.

Công cụ Elasticsearch thì được các công ty lớn họ rất yêu chuộng:
Một số công ty nổi tiếng lựa chọn sử dụng Elasticsearch
- Facebook.com
- wordpress.com
- github
- adobe
- Netflix
- SoundCloud
- Wikimedia
- SoundCloud
- …
Mục lục
Vì sao phải cần Elasticsearch
nếu như website của bạn ít bài viết, hay ít sản phẩm việc sử dụng tìm kiếm mặc định của WordPress cũng rất ngon, tuy nhiên nếu website của bạn trên 50 bài viết thì tìm kiếm của WordPress mặc định sẽ không đáp ứng được từ độ chính xác và cũng như tốc độ.
Còn nhiều anh em bài viết trên vài nghìn thì khủng khiếp như thế nào.
còn chưa nói là search mặc định của WordPress sử dụng mysql dùng truy vấn LIKE thì nó search từ ngữ không dấu thì còn khá chuẩn nhưng mà dùng có dấu như tiếng việt có dấu thì độ chính xác rất là khoai. Nó cũng chính là phần giới hạn về kỹ thuật của MYSQL không được sinh ra để làm công cụ search tìm kiếm nội dung vì vậy search của WordPress mặc định hơn chán một chút.
mặc định search tìm kiếm của WordPress rất là cùi bắp chỉ đáp ứng ở mức nhu cầu rất cơ bản còn nhu cầu yêu cầu cao một chút mình cần phải thay thế bằng phần mềm bên thứ 3.
Mà phần mềm bên thứ 3 để giải quyết vấn đề này rất nhiều mà được yêu chuộng nhất ở thời điểm hiện tại chính là Elasticsearch
Hướng dẫn cài đặt Elasticsearch
Yều cầu để kích hoạt Elasticsearch
- Yêu cầu bạn đang sử dụng VPS hoặc máy chủ riêng của quyền root nhé còn anh em dùng share hosting thì kèo này e là khó, nếu bạn đang dùng share hosting thì mình đề cử tham khảo algolia.
- Cụ thể hướng dẫn thị phạm mình sẽ hướng dẫn hệ điều hành Almalinux 8 && 9, Rocky linux8 && 9…
- Máy chủ của bạn cũng dư giả ram Elasticsearch sử dụng khá là nhiều RAM
- website của bạn nhiều bài viết hay nhiều sản phẩm thì mới thực sự cần Elasticsearch còn ít sản phẩm và ít bài viết thì Elasticsearch là không cần thiết.
Anh em login vào ssh vps hay máy chủ riêng của anh em
Bước 1: Cài đặt JAVA (cài đặt java để có thể sử dụng Elasticsearch )
elasticsearch sử dụng java để phát triển vì vậy mình cần java.
Vì vậy để sử dụng elasticsearch bạn cần cài đặt từ cấp server vì nó được viết bằng java không phải là được viết bằng mỗi php thôi không. Nếu chỉ viết bằng php thôi không thì chỉ cần mỗi plugin wordpress là hoạt động được ngay.
Để sử dụng elasticsearch cần phải cài đặt từ server của bạn.
Cài đặt java:
dnf remove 'java-1.8.0-openjdk-*' -y dnf install java-11-openjdk-devel -y
Bước 2: Cài đặt Elasticsearch
Mình sẽ tải elasticsearch phiên bản 8.x: bạn tạo một file: /etc/yum.repos.d/elasticsearch.repo rồi đưa nội dung ở dưới đây vào:
[elasticsearch] name=Elasticsearch repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
Tiến hành cài đặt elasticsearch gõ lệnh sau vào terminal:
sudo dnf install -y elasticsearch
Khi đã install gõ lệnh dưới này vào terminal:
/usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.keystore.secure_password /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.truststore.secure_password /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.http.ssl.keystore.secure_password
Cấu hình elasticsearch: /etc/elasticsearch/elasticsearch.yml
bạn có thể sử dụng nano hoặc trình sửa văn bản nào cũng được đưa đoạn code này ở xuống cuối file
xpack.security.enabled: false network.host: 127.0.0.1 http.port: 9200
Điều chỉnh mức sử dụng ram: /etc/elasticsearch/jvm.options
Cấu hình mặc định elasticsearch được thiết lập dùng 1G ram, nhưng không phải máy chủ nào cũng dư giả 1gb ram bạn có thể điều chỉnh cho nó phù hợp với tài nguyên hiện tại của bạn giả sử: mình sẽ config xuống chỉ dùng 512MB ram mà thôi. Nếu bạn dư giả tài nguyên ram thì có thể tăng thêm.
Ví dụ hãy chuyển từ 1g ram xuống còn 512mb vào file /etc/elasticsearch/jvm.options sửa như thế này : -Xms1g thành -Xms512m và -Xmx1g thành -Xmx512m
-Xms512m -Xmx512m
Tiến hành khởi động elasticsearch
systemctl enable elasticsearch.service systemctl start elasticsearch.service
Kiểm tra hoạt động của elasticsearch đã hoạt động chưa:
curl -X GET http://localhost:9200/

Nếu lệnh mà nó print ra như hình trên thì bạn đã cài thành công elasticsearch và nếu như nó báo lỗi thì vui lòng kiểm tra lại các bước xem bạn đã làm đúng hay chưa.
Như vậy là các bước cài elasticsearch cho server đã hoàn tất bây giờ đến bước kích hoạt elasticsearch cho WordPress nhé.
Bước 3: Kích hoạt elasticsearch cho WordPress
Mình cần sử dụng plugin: ElasticPress bạn kích hoạt plugin này vào website wordpress của bạn.
Plugin này giúp website WordPress của bạn giao tiếp với Elasticsearch trên máy chủ của bạn.
Bạn cho đoạn code này vào file wp-config.php của bạn cho dòng thứ 2 (dưới dòng <?php)
define( 'EP_HOST', 'http://127.0.0.1:9200' );
Rồi bạn vào quản trị wp-admin => plugin elasticsearch config next next mấy cái rồi, có phần index dữ liệu thì bạn index dữ liệu

và ngồi đợi máy chủ làm việc tốc độ nhanh hay chậm tùy vào số lượng dữ liệu của bạn và cấu hình phần cứng của bạn.
như vậy là xong rồi.
Sau khi đồng bộ index ban đầu, plugin sẽ tự động đồng bộ hóa tất cả các thay đổi và bổ sung sau này.(bạn không cần phải reindex thủ công lại khi dữ liệu thay đổi nhiều dữ liệu việc này sẽ tự động hoàn toàn nhờ plugin ElasticPress)
Còn phần cấu hình các trọng số giá trị bài viết ưu tiên thứ tự tìm kiếm trong phần cài đặt plugin ElasticPress thì mỗi người một nhu cầu, một chiến lược khác nhau khoản này thì bạn tự nghiên cứu và điều chỉnh sao cho phù hợp với nhu cầu của mình. Điều chỉnh cái này plugin ElasticPress điều chỉnh giao diện rất trực quan rất dễ hiểu.
một tip tối ưu elasticsearch hơn nữa, nếu như bạn sử dụng tính năng Highlighting status được cài đặt ở plugin elasticpress là bạn có thẻ tải điều kiện file css của plugin elasticpress, bạn cho đoạn code này vào file functions.php
của bạn
add_action('wp_enqueue_scripts', 'wptangtoc_tai_dieu_kien_elasticpress', 99); function wptangtoc_tai_dieu_kien_elasticpress() { if( ! is_search()) { wp_deregister_style('searchterm-highlighting'); } }
Ajax tìm kiếm WordPress
Tuy nhiên dành cho trường hợp nhu cầu nâng cao, kết hợp ajax tìm kiếm với ElasticPress.
Thêm ep_integrate
vào class WP_Query
(nếu cần): Thông thường, ElasticPress sẽ tự động tích hợp với các truy vấn tìm kiếm mặc định WordPress (những truy vấn có tham số ?s=
ví dụ: wptangtoc.com?s=gia-tuan). Tuy nhiên, nếu bạn có một truy vấn WP_Query
không phải là tìm kiếm mặc định nhưng vẫn muốn nó được xử lý bởi ElasticPress, bạn cần thêm tham số 'ep_integrate' => true
. vào trong mảng array của class WP_Query
Mình sẽ ví dụ: Trong một số trường hợp nâng cao là bạn sử dụng search live thời gian thực dạng ajax flatsome thì cần phải làm thêm bước này, nếu website bạn không sử dụng cái này thì bạn bỏ qua.
Ví dụ bạn đang sử dụng search live ajax của themes flatsome: thì bạn vào đường dẫn này : wp-content/themes/flatsome/inc/extensions/flatsome-live-search/flatsome-live-search.php
cho đoạn code này vào dòng 141 trong array nhé
'ep_integrate' => true,
Mỗi một plugin thì cách add khác nhau hoặc các nhà phát triển plugin cũng có thể đã auto kiểm tra và tự động add cho bạn tùy vào nhà phát triển làm tính năng search ajax đó.
Còn một phương án khác tốt hơn không phải ai cũng dùng themes flastome và anh em dùng trình search ajax nào đó và không phải ai cũng thích ghi sửa code vào themes cha sau này có update themes phải update lại rất mất công sức.
Mình sẽ chỉ cho bạn một cách tối ưu dành cho search ajax hơn.
Đoạn code này bạn hãy đưa vào file functions.php .Mình sẽ ví dụ search ajax của flastome: mình sẽ sử dụng flatsome_ajax_search_products
function wptangtoc_integrate_ajax_search_with_elasticpress( $query ) { // Kiểm tra xem có phải là yêu cầu AJAX và đúng action của Flatsome không if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'flatsome_ajax_search_products' ) { $query->set( 'ep_integrate', true ); add_filter( 'ep_ajax_wp_query_integration', '__return_true' ); add_filter( 'ep_enable_do_weighting', '__return_true' ); } } add_action( 'pre_get_posts', 'wptangtoc_integrate_ajax_search_with_elasticpress' );
Nếu anh em không dùng flastome anh dùng trình search ajax khác anh em hãy thay flatsome_ajax_search_products bằng cái call admin-ajax.php của anh em.
Cách tìm kiểm tra thì anh em ấn nút f12 trên màn hình rồi vào phần network: rồi anh em vào search thử một cái gì đó trên trình tìm kiểm của website của mình. Cái thì trình duyệt sẽ call một file ví dụ như thế này:
https://wptangtoc.com/wp-admin/admin-ajax.php?action=flatsome_ajax_search_products&query=gia-tuanchính cái flatsome_ajax_search_products là cái action= anh hãy thay vào đoạn code đó.(nó sẽ sau action= và … trước &query).
Một plugin rất phổ biến khác là Ivory Search cách họ call bằng javascript họ không dùng trực tiếp http query sting mà dùng bằng javascript gọi gián tiếp là is_ajax_load_posts
Nếu anh em dùng Ivory Search thay flatsome_ajax_search_products bằng is_ajax_load_posts rồi đưa vào file functions.php là ok
Còn một trường hợp nâng cao ajax hơn, plugin đó họ chuyên biệt search ajax sản phẩm, có thể họ không sử dụng admin-ajax mà họ lại dùng wc-ajax. ví dụ như plugin có tiếng là FiboSearch – Ajax Search for WooCommerce
Thì bạn phải dùng đoạn code này mình sẽ thị phạm về plugin FiboSearch hãy đưa đoạn code này vào functions.php của mình:
function wptangtoc_integrate_fibosearch_with_elasticpress( $query ) { if ( isset( $_REQUEST['wc-ajax'] ) && $_REQUEST['wc-ajax'] === 'dgwt_wcas_ajax_search' ) { $query->set( 'ep_integrate', true ); add_filter( 'ep_ajax_wp_query_integration', '__return_true' ); add_filter( 'ep_enable_do_weighting', '__return_true' ); } } add_action( 'pre_get_posts', 'wptangtoc_integrate_fibosearch_with_elasticpress', 99 );
Nếu anh em không dùng FiboSearch mà bị rơi vào trường hợp thế này anh em hãy thay dgwt_wcas_ajax_search bằng cái mà anh em đang sử dụng.
Kích hoạt Elasticsearch cho Website WordPress đơn giản như vậy thôi, chúc bạn thành công.
đây là kỹ thuật cải thiện tốc độ search cho wordpress và nâng cao khả năng chính xác khả năng tìm kiếm rất hữu ích với website có nhiều bài viết và có nhiều sản phẩm, nếu website còn ít sản phẩm và ít bài viết thì Elasticsearch là thực sự không cần thiết lắm.
Chia sẻ thêm: để biết xem website mình đã hoạt động được với Elasticsearch hay chưa.
thì bạn hãy tải thêm: plugin ElasticPress Debugging Add-On rồi trong menu ElasticPress sẽ có thêm phần query log để bạn kiểm tra. Nếu bạn search thử rồi xem query log nếu có phần dòng chữ:
Type: Main query
Tức là đã chiến khai thành công, và còn ngược lại nếu không có thì là chưa thành công.
Hy vọng kỹ thuật này sẽ giúp ích cho bạn.
Để lại một bình luận