Это 9-й день моего участия в августовском испытании обновлений, подробности о событии:Испытание августовского обновления
Если ❤️моя статья оказалась полезной, ставьте лайк и подписывайтесь. Это самый большой стимул для меня продолжать техническое творчество.Больше предыдущих статей в моей личной колонке
Пример поиска URI ElasticSearch
Я считаю, что все использовали DSL (Specific Query Language), используемый для запросов в Elasticsearch.Кроме того, Elasticsearch также может указывать условия запроса через uri.
Хотя эти функции не такие мощные, как у DSL, вы можете узнать о них больше.
Базовый запрос
История начинается с вопроса:
GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
Как видно из вышеизложенного, сюда входят следующие параметры:
- q указывает оператор запроса, используя синтаксис строки запроса
- поле по умолчанию df, если не указано, будут запрошены все поля
- sort sort/from и size для нумерации страниц
- profile, чтобы увидеть, как выполняется запрос
синтаксис поля запроса
- { "profile":"true" } показать план выполнения запроса
- Запрос указанного поля и общий запрос: q=title:2012 / q=2012
- Term vs Phrase
- Beautiful Mind эквивалентен запросу or
- «Прекрасный разум» эквивалентно запросу и
- Фраза требует, чтобы порядок оставался последовательным
- группировка и цитаты
- title:(Прекрасный разум) Группировка означает, что они должны появляться вместе
- Фраза title="Beautiful Mind" означает, что она должна появляться вместе и по порядку.
- Булева операция
- И / ИЛИ / НЕ или && / || / !
- должен быть написан с большой буквы
- И / ИЛИ / НЕ или && / || / !
- группировка
-
- значит должен
-
- означает must_not
- title:(+matrix -reloaded) должен иметь матрицу и (поскольку это группировка) не может быть перезагружен
-
- запрос диапазона
- Интервальное представление: [] закрытый интервал, {} открытый интервал
- year:>=1980
- year:{2019 TO 2018}
- year:[* TO 2019]
- Интервальное представление: [] закрытый интервал, {} открытый интервал
- Арифметические символы
- year:>2010
- year:(>2010 && <=2018)
- year:(+>2010 +<=2018>)
- Подстановочные знаки (низкая эффективность запросов, большое использование памяти, не рекомендуется. Особенно вверху)
- ? представляет один символ, * представляет 0 или более символов
- регулярное выражение
- title:[bt]oy
- Нечеткое сопоставление и приближенный запрос
- title:befutifl~1
- title:"lord rings"~2
конкретная операция
# 基本查询
GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
# 带profile, 展示执行计划
GET /movies/_search?q=2012&df=title
{
"profile":"true"
}
================== 返回结果 ==================
{
"took" : 76,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 4.1047716,
"hits" : [
{
"_index" : "tag",
"_type" : "_doc",
"_id" : "hFpZH3sBgpUFltoIW7vi",
"_score" : 4.1047716,
"_source" : {
"memberId" : 618,
"phone" : "15321761517",
"sex" : "1",
"channel" : 4,
"subOpenId" : "gcik-4nwr9lsy7pv",
"address" : 618,
"regTime" : "2019-11-22",
"orderCount" : 3,
"orderTime" : "2019-11-22",
"orderMoney" : 7546.0,
"favGoods" : [
2,
11,
16
],
"couponTimes" : [
"2019-11-25",
"2019-11-27",
"2019-11-13"
],
"chargeMoney" : 25.0,
"overTime" : 2100
}
}
]
},
"profile" : {
"shards" : [
{
"id" : "[0tHjuZtUQMeFyRCWlNgK4w][tag][0]",
"searches" : [
{
"query" : [
{
"type" : "TermQuery",
"description" : "subOpenId:gcik",
"time_in_nanos" : 237449,
"breakdown" : {
"score" : 0,
"build_scorer_count" : 8,
"match_count" : 0,
"create_weight" : 231939,
"next_doc" : 0,
"match" : 0,
"create_weight_count" : 1,
"next_doc_count" : 0,
"score_count" : 0,
"build_scorer" : 5501,
"advance" : 0,
"advance_count" : 0
}
}
],
"rewrite_time" : 3399,
"collector" : [
{
"name" : "CancellableCollector",
"reason" : "search_cancelled",
"time_in_nanos" : 81522,
"children" : [
{
"name" : "SimpleTopScoreDocCollector",
"reason" : "search_top_hits",
"time_in_nanos" : 64422
}
]
}
]
}
],
"aggregations" : [ ]
},
{
"id" : "[0tHjuZtUQMeFyRCWlNgK4w][tag][1]",
"searches" : [
{
"query" : [
......
],
"rewrite_time" : 3546,
"collector" : [
......
]
}
],
"aggregations" : [ ]
},
{
"id" : "[0tHjuZtUQMeFyRCWlNgK4w][tag][2]",
"searches" : [
{
"query" : [
......
}
],
"rewrite_time" : 4308,
"collector" : [
......
]
}
],
"aggregations" : [ ]
},
{
"id" : "[0tHjuZtUQMeFyRCWlNgK4w][tag][3]",
"searches" : [
{
"query" : [
......
],
"rewrite_time" : 3412,
"collector" : [
......
]
}
],
"aggregations" : [ ]
},
{
"id" : "[0tHjuZtUQMeFyRCWlNgK4w][tag][4]",
"searches" : [
{
"query" : [
......
],
"rewrite_time" : 22285,
"collector" : [
......
]
}
]
}
],
"aggregations" : [ ]
}
]
}
}
Другие запросы URI
# 泛查询,正对_all,所有字段
GET /movies/_search?q=2012
{
"profile":"true"
}
# 指定字段
GET /movies/_search?q=title:2012&sort=year:desc&from=0&size=10&timeout=1s
{
"profile":"true"
}
# 查找美丽心灵, Mind为泛查询
GET /movies/_search?q=title:Beautiful Mind
{
"profile":"true"
}
# 泛查询
GET /movies/_search?q=title:2012
{
"profile":"true"
}
# 使用引号,Phrase查询
GET /movies/_search?q=title:"Beautiful Mind"
{
"profile":"true"
}
# 分组,Bool查询
GET /movies/_search?q=title:(Beautiful Mind)
{
"profile":"true"
}
# 布尔操作符
# 查找美丽心灵
GET /movies/_search?q=title:(Beautiful AND Mind)
{
"profile":"true"
}
# 查找美丽心灵
GET /movies/_search?q=title:(Beautiful NOT Mind)
{
"profile":"true"
}
# 查找美丽心灵
GET /movies/_search?q=title:(Beautiful %2BMind)
{
"profile":"true"
}
# 范围查询 ,区间写法
GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018%7D
{
"profile":"true"
}
# 通配符查询
GET /movies/_search?q=title:b*
{
"profile":"true"
}
# 模糊匹配&近似度匹配
GET /movies/_search?q=title:beautifl~1
{
"profile":"true"
}
GET /movies/_search?q=title:"Lord Rings"~2
{
"profile":"true"
}