Elasticsearch ile sadece istediğimiz kayıtları seçmek için operator özelliğini kullanırız. Farklılıkları görmek için aşağıdaki sorgulara bakın. Daha fazla bilgi için Match Query sayfasını okuyun.


Örnek veriler


+----+---------+-------------+-------------+------+-------+--------------+---------------------+
| id | title | description | author | year | price | is_published | created_at |
+----+---------+-------------+-------------+------+-------+--------------+---------------------+
| 1 | Eltit B | Desc | Andy | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 2 | Title 1 | Desc 1 | Pacino | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 3 | Title 1 | Cript A | DeNiro | 2010 | 1.00 | 0 | 2016-03-11 23:36:33 |
| 4 | Eltit | Desc | Al | 2000 | 4.00 | 0 | 2016-03-11 23:36:33 |
| 5 | Eltit B | Cript A | Andy Garcia | 2015 | 5.55 | 0 | 2016-03-11 23:36:33 |
| 6 | Eltit A | Desc | Al Pacino | 2000 | 3.99 | 0 | 2016-03-11 23:36:33 |
| 7 | Title 3 | Desc 2 | Al | 2010 | 0.50 | 1 | 2016-03-11 23:36:33 |
+----+---------+-------------+-------------+------+-------+--------------+---------------------+
7 rows in set (0.05 sec)

Operator kullanmadan


Sorgu 1


Bu sorgu "title" alanında "Title" kelimesi bulunan kayıtları seçer.


# Elasticsearch
curl -XGET "http://127.0.0.1:9203/_search?post_dev" -d'
{
"query": {
"match": {
"title": {
"query": "Title"
}
}
},
"sort": [
{
"id": {
"order": "asc"
}
}
],
"from": "0",
"size": "10"
}'

# SQL
SELECT *
FROM post
WHERE MATCH(`title`) AGAINST ('Title' IN BOOLEAN MODE)
ORDER BY id ASC
LIMIT 10
OFFSET 0;

Sonuç


+----+---------+-------------+--------+------+-------+--------------+---------------------+
| id | title | description | author | year | price | is_published | created_at |
+----+---------+-------------+--------+------+-------+--------------+---------------------+
| 2 | Title 1 | Desc 1 | Pacino | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 3 | Title 1 | Cript A | DeNiro | 2010 | 1.00 | 0 | 2016-03-11 23:36:33 |
| 7 | Title 3 | Desc 2 | Al | 2010 | 0.50 | 1 | 2016-03-11 23:36:33 |
+----+---------+-------------+--------+------+-------+--------------+---------------------+
3 rows in set (0.00 sec)

Sorgu 2


Bu sorgu "title" alanında "Title" veya "Eltit" kelimesi bulunan kayıtları seçer.


# Elasticsearch
curl -XGET "http://127.0.0.1:9203/_search?post_dev" -d'
{
"query": {
"match": {
"title": {
"query": "Title Eltit"
}
}
},
"sort": [
{
"id": {
"order": "asc"
}
}
],
"from": "0",
"size": "10"
}'

# SQL
SELECT *
FROM post
WHERE MATCH(`title`) AGAINST ('Title Eltit' IN BOOLEAN MODE)
ORDER BY id ASC
LIMIT 10
OFFSET 0;

Sonuç


+----+---------+-------------+-------------+------+-------+--------------+---------------------+
| id | title | description | author | year | price | is_published | created_at |
+----+---------+-------------+-------------+------+-------+--------------+---------------------+
| 1 | Eltit B | Desc | Andy | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 2 | Title 1 | Desc 1 | Pacino | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 3 | Title 1 | Cript A | DeNiro | 2010 | 1.00 | 0 | 2016-03-11 23:36:33 |
| 4 | Eltit | Desc | Al | 2000 | 4.00 | 0 | 2016-03-11 23:36:33 |
| 5 | Eltit B | Cript A | Andy Garcia | 2015 | 5.55 | 0 | 2016-03-11 23:36:33 |
| 6 | Eltit A | Desc | Al Pacino | 2000 | 3.99 | 0 | 2016-03-11 23:36:33 |
| 7 | Title 3 | Desc 2 | Al | 2010 | 0.50 | 1 | 2016-03-11 23:36:33 |
+----+---------+-------------+-------------+------+-------+--------------+---------------------+
7 rows in set (0.05 sec)

Operator kullanarak


Sorgu 1


Bu sorgu "title" alanında "Title" kelimesi bulunan kayıtları seçer. Aslında operator özelliğini eklemenize gerek yok ama ben sadece nasıl kullanılacağını göstermek için ekledim. Bu sorgu yukarıdaki Sorgu 1 ile aynı sayılır.


# Elasticsearch
curl -XGET "http://127.0.0.1:9203/_search?post_dev" -d'
{
"query": {
"match": {
"title": {
"query": "Title",
"operator": "and"
}
}
},
"sort": [
{
"id": {
"order": "asc"
}
}
],
"from": "0",
"size": "10"
}'

# SQL
SELECT *
FROM post
WHERE MATCH(`title`) AGAINST ('Title' IN BOOLEAN MODE)
ORDER BY id ASC
LIMIT 10
OFFSET 0;

Sonuç


+----+---------+-------------+--------+------+-------+--------------+---------------------+
| id | title | description | author | year | price | is_published | created_at |
+----+---------+-------------+--------+------+-------+--------------+---------------------+
| 2 | Title 1 | Desc 1 | Pacino | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 3 | Title 1 | Cript A | DeNiro | 2010 | 1.00 | 0 | 2016-03-11 23:36:33 |
| 7 | Title 3 | Desc 2 | Al | 2010 | 0.50 | 1 | 2016-03-11 23:36:33 |
+----+---------+-------------+--------+------+-------+--------------+---------------------+
3 rows in set (0.00 sec)

Sorgu 2


Bu sorgu "title" alanında "Title" veya "Eltit" kelimesi bulunan kayıtları seçer. Bu sorgu yukarıdaki Sorgu 2 ile aynı sayılır.


# Elasticsearch
curl -XGET "http://127.0.0.1:9203/_search?post_dev" -d'
{
"query": {
"match": {
"title": {
"query": "Title Eltit",
"operator": "or"
}
}
},
"sort": [
{
"id": {
"order": "asc"
}
}
],
"from": "0",
"size": "10"
}'

# SQL
SELECT *
FROM post
WHERE MATCH(`title`) AGAINST ('Title Eltit' IN BOOLEAN MODE)
ORDER BY id ASC
LIMIT 10
OFFSET 0;

Sonuç


+----+---------+-------------+-------------+------+-------+--------------+---------------------+
| id | title | description | author | year | price | is_published | created_at |
+----+---------+-------------+-------------+------+-------+--------------+---------------------+
| 1 | Eltit B | Desc | Andy | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 2 | Title 1 | Desc 1 | Pacino | 2015 | 2.50 | 1 | 2016-03-11 23:36:33 |
| 3 | Title 1 | Cript A | DeNiro | 2010 | 1.00 | 0 | 2016-03-11 23:36:33 |
| 4 | Eltit | Desc | Al | 2000 | 4.00 | 0 | 2016-03-11 23:36:33 |
| 5 | Eltit B | Cript A | Andy Garcia | 2015 | 5.55 | 0 | 2016-03-11 23:36:33 |
| 6 | Eltit A | Desc | Al Pacino | 2000 | 3.99 | 0 | 2016-03-11 23:36:33 |
| 7 | Title 3 | Desc 2 | Al | 2010 | 0.50 | 1 | 2016-03-11 23:36:33 |
+----+---------+-------------+-------------+------+-------+--------------+---------------------+
7 rows in set (0.05 sec)

Sorgu 3


Bu sorgu "title" alanında aynı anda "Title" ve "Eltit" kelimeleri bulunan kayıtları seçer.


# Elasticsearch
curl -XGET "http://127.0.0.1:9203/_search?post_dev" -d'
{
"query": {
"match": {
"title": {
"query": "Title Eltit",
"operator": "and"
}
}
},
"sort": [
{
"id": {
"order": "asc"
}
}
],
"from": "0",
"size": "10"
}'

Sonuç


Empty set (0.00 sec)