> For the complete documentation index, see [llms.txt](https://learnsql.gitbook.io/lernmysql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learnsql.gitbook.io/lernmysql/elasticsearch-and-php-and-mysql-thuc-hanh-phan-5.md).

# ElasticSearch & php & mysql thực hành – Phần 5 (tìm hiểu tham số search)

https\://thinhpc86.wordpress.com/2015/06/11/elasticsearch-php-mysql-thuc-hanh-phan-5/

## ElasticSearch & php & mysql thực hành – Phần 5

[June 11, 2015](https://thinhpc86.wordpress.com/2015/06/11/elasticsearch-php-mysql-thuc-hanh-phan-5/) [thinhpc86](https://thinhpc86.wordpress.com/author/thinhpc86/) [Java](https://thinhpc86.wordpress.com/tag/java/), [PHP](https://thinhpc86.wordpress.com/category/php/)[ElasticSearch](https://thinhpc86.wordpress.com/tag/elasticsearch/), [Java](https://thinhpc86.wordpress.com/tag/java/), [PHP](https://thinhpc86.wordpress.com/tag/php/)

Bài trước ta đã làm quen với [1 số API cơ bản](https://thinhpc86.wordpress.com/2015/06/10/elasticsearch-php-mysql-thuc-hanh-phan-4/). Bài hôm nay ta tìm hiểu về Search API – khá thú vị, vì đây là chức năng chúng ta muốn biết nhất khi học ES

**Search API**

Để search các document có trong 1 index, ta có 2 cách cơ bản sau:

| 1 | `curl` `'localhost:9200/bank/_search?q=*&pretty'` |
| - | ------------------------------------------------- |

hoặc:

```
 curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match_all": {} }
}'
```

“q=\*” tương đương với query match\_all của câu lệnh POST bên dưới Trong kết quả trả về sẽ có thời gian thực thi(ms), tổng số doc được tìm thấy và 1 mảng các docs được trả về. Mặc định limit là 10 docs đầu tiên được trả về. Quan trọng bạn cần hiểu rằng một khi bạn có được kết quả search, ES đã hoàn thành với request và không cần can thiệp hay giữ kết nối gì với server. Điểm này đối lập hoàn toàn với các nền tảng khác như SQL – trong đó ban đầu bạn có được 1 tập hợp con kết quả trả về và sau đó bạn phải tiếp tục liên hệ tới server nếu bạn muốn lấy các phần kết quả còn lại. **Paging:** Trong ví dụ dưới đây, ta sẽ trả về 10 kết quả (từ 11 đến 20):

```
curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}'

```

**Order:**

```
 curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } }
}'

```

**Chỉ trả về 1 số fields:**

```
 curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}'

```

**Query có điều kiện:** Trả về các accounts có giá trị bằng 20

```
 curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match": { "account_number": 20 } }
}'
```

**Tìm theo text:** Trả về docs address có chứa text “mill”

```
curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match": { "address": "mill" } }
}'
```

Trả về docs address có chứa text “mill” hoặc “lane”

```
 curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": { "match": { "address": "mill lane" } }
}'
```

Trả về docs address có chứa cụm từ “mill lane”

```
 curl -XPOST 'localhost:9200/bank/_search?pretty'  -H "Content-Type: application/json" -d '{  "query": { "match_phrase": { "address": "mill lane" } }}'
```

**Boolean Query:** Boolean Query cho phép chúng ta tạo ra những câu queries phức tạp được kết hợp từ các queries nhỏ. Câu Query dưới đây sẽ trả về các docs vừa có “mill” và vừa có “lane” trong address:

```
 curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'

```

Trong câu Query trên, điều kiện bool much nghĩa là tất cả điều kiện trong nó phải trả về true thì mới được tìm thấy Ngược lại, câu query dưới đây kết hợp 2 match query để trả về các kết quả có chứa “mill” hoặc “lane”:

```
curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'

```

Tìm kết quả không chứa các text “mill” và “lane”

```
curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'

```

Cuối cùng, chúng ta có thể kết hợp các điều kiện bool lại trong 1 query, về sau này ta có thể kết hợp các câu lệnh bool lồng nhau để tạo nên những query phức tạp cụ thể hơn

```
curl -XPOST 'localhost:9200/bank/_search?pretty' -H "Content-Type: application/json" -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}'
```

nguồn:\
<https://www.elastic.co/guide/en/elasticsearch/reference/1.5/_the_search_api.html>
