manual/russian/Searching/Search_results.md
При выполнении запроса через SQL по протоколу MySQL вы получаете запрошенные столбцы в качестве результата или пустой набор результатов, если ничего не найдено.
<!-- request SQL -->SELECT * FROM tbl;
+------+------+--------+
| id | age | name |
+------+------+--------+
| 1 | 25 | joe |
| 2 | 25 | mary |
| 3 | 33 | albert |
+------+------+--------+
3 rows in set (0.00 sec)
POST /search
{
"table": "tbl"
}
{
"took": 0,
"timed_out": false,
"hits": {
"total": 3,
"total_relation": "eq",
"hits": [
{
"_id": 1,
"_score": 2500,
"_source": {
"age": 25,
"name": "joe"
}
},
{
"_id": 2,
"_score": 2500,
"_source": {
"age": 25,
"name": "mary"
}
},
{
"_id": 3,
"_score": 2500,
"_source": {
"age": 33,
"name": "albert"
}
}
]
}
}
Кроме того, вы можете использовать вызов SHOW META, чтобы увидеть дополнительную мета-информацию о последнем запросе.
<!-- request SQL -->SELECT id,story_author,comment_author FROM hn_small WHERE story_author='joe' LIMIT 3; SHOW META;
++--------+--------------+----------------+
| id | story_author | comment_author |
+--------+--------------+----------------+
| 152841 | joe | SwellJoe |
| 161323 | joe | samb |
| 163735 | joe | jsjenkins168 |
+--------+--------------+----------------+
3 rows in set (0.01 sec)
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| total | 3 |
| total_found | 20 |
| total_relation | gte |
| time | 0.010 |
+----------------+-------+
4 rows in set (0.00 sec)
POST /sql?mode=raw -d "SELECT id,f1,f2 FROM t WHERE f2=2 LIMIT 1; SHOW META"
[
{
"columns": [
{
"id": {
"type": "long long"
}
},
{
"f1": {
"type": "string"
}
},
{
"f2": {
"type": "long"
}
}
],
"data": [
{
"id": 724024784404348900,
"f1": "b",
"f2": 2
}
],
"total": 1,
"error": "",
"warning": ""
},
{
"columns": [
{
"Variable_name": {
"type": "string"
}
},
{
"Value": {
"type": "string"
}
}
],
"data": [
{
"Variable_name": "total",
"Value": "1"
},
{
"Variable_name": "total_found",
"Value": "1"
},
{
"Variable_name": "total_relation",
"Value": "gte"
},
{
"Variable_name": "time",
"Value": "0.000"
}
],
"total": 4,
"error": "",
"warning": ""
}
]
В некоторых случаях, например, при выполнении фасетного поиска, вы можете получить несколько наборов результатов в ответ на свой SQL-запрос.
<!-- data for the following examples: DROP TABLE IF EXISTS tbl; CREATE TABLE tbl(id bigint, age int, name string); INSERT INTO tbl (id, age, name) VALUES (1, 25, 'joe'), (2, 25, 'mary'), (3, 33, 'albert'); --> <!-- request SQL -->SELECT * FROM tbl WHERE MATCH('joe') FACET age;
+------+------+
| id | age |
+------+------+
| 1 | 25 |
+------+------+
1 row in set (0.00 sec)
+------+----------+
| age | count(*) |
+------+----------+
| 25 | 1 |
+------+----------+
1 row in set (0.00 sec)
POST /sql -d "SELECT * FROM tbl WHERE MATCH('joe') FACET age"
{
"took": 0,
"timed_out": false,
"hits": {
"total": 1,
"total_relation": "eq",
"hits": [
{
"_score": 2500,
"_source": {
"name": "joe"
}
}
]
},
"aggregations": {
"rating": {
"buckets": [
{
"key": 1,
"doc_count": 1
}
]
}
}
}
В случае предупреждения, набор результатов будет включать флаг предупреждения, и вы можете увидеть предупреждение с помощью SHOW WARNINGS.
<!-- request SQL -->SELECT * from tbl where match('"joe"/3'); show warnings;
+------+------+------+
| id | age | name |
+------+------+------+
| 1 | 25 | joe |
+------+------+------+
1 row in set, 1 warning (0.00 sec)
+---------+------+--------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------------------------------------+
| warning | 1000 | quorum threshold too high (words=1, thresh=3); replacing quorum operator with AND operator |
+---------+------+--------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
POST /sql?mode=raw -d "SELECT * from t where match('\"a\"/3'); show warnings"
[
{
"columns": [
{
"id": {
"type": "long long"
}
},
{
"f2": {
"type": "long"
}
},
{
"f1": {
"type": "string"
}
}
],
"data": [],
"total": 0,
"error": "",
"warning": ""
},
{
"columns": [
{
"Level": {
"type": "string"
}
},
{
"Code": {
"type": "decimal"
}
},
{
"Message": {
"type": "string"
}
}
],
"data": [
{
"Level": "warning",
"Code": "1000",
"Message": "table t: quorum threshold too high (words=1, thresh=3); replacing quorum operator with AND operator"
}
],
"total": 1,
"error": "",
"warning": ""
}
]
Если ваш запрос завершится ошибкой, вы получите сообщение об ошибке:
<!-- request SQL -->SELECT * from tbl where match('@surname joe');
ERROR 1064 (42000): index idx: query error: no field 'surname' found in schema
POST /sql -d "SELECT * from t where match('@surname joe')"
{
"error": "table t: query error: no field 'surname' found in schema"
}
Через HTTP JSON интерфейс результат запроса отправляется в виде JSON-документа. Пример:
{
"took":10,
"timed_out": false,
"hits":
{
"total": 2,
"hits":
[
{
"_id": 1,
"_score": 1,
"_source": { "gid": 11 }
},
{
"_id": 2,
"_score": 1,
"_source": { "gid": 12 }
}
]
}
}
took: время выполнения поиска в миллисекундахtimed_out: указывает, истекло ли время выполнения запроса или нетhits: результаты поиска со следующими свойствами:
total: общее количество соответствующих документовhits: массив, содержащий совпаденияРезультат запроса также может включать информацию профилирования запроса. Смотрите Профиль запроса.
Каждое совпадение в массиве hits имеет следующие свойства:
_id: идентификатор совпадения_score: вес совпадения, рассчитанный ранкером_source: массив, содержащий атрибуты этого совпаденияПо умолчанию все атрибуты возвращаются в массиве _source. Вы можете использовать свойство _source в теле запроса, чтобы выбрать поля, которые хотите включить в набор результатов. Пример:
{
"table":"test",
"_source":"attr*",
"query": { "match_all": {} }
}
Вы можете указать атрибуты, которые хотите включить в результат запроса, в виде строки ("_source": "attr*") или в виде массива строк ("_source": [ "attr1", "attri*" ]"). Каждая запись может быть именем атрибута или шаблоном с подстановочными знаками (поддерживаются символы *, % и ?).
Вы также можете явно указать, какие атрибуты вы хотите включить, а какие исключить из набора результатов, используя свойства includes и excludes:
"_source":
{
"includes": [ "attr1", "attri*" ],
"excludes": [ "*desc*" ]
}
Пустой список включает интерпретируется как «включить все атрибуты», в то время как пустой список исключений ничего не исключает. Если атрибут соответствует как включениям, так и исключениям, то исключения имеют приоритет.
<!-- proofread -->