带条件查询
GET test_mapping_manual1/_search?q=name:hello
GET test_mapping_manual1/_search?from=0&size=3&sort=age:asc
尝试了text类型排序需要特别处理下. "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
这种查询方式是创建索引的字段都会被检索
GET test_mapping_manual1/_search?q=hell
关闭字段索引,在mapping中设置
"cloName": {
"type": "text",
"index": false
}
全文检索 Fulltext search
match
GET test_mapping_manual1/_search
{
"query": {
"match": {
"name": "John Smith"
}
}
}
# name包含John或者Smith都会被检索出来即这里对搜索词做了分词,且对source data也做了分词
这种把条件放到json体中
GET test_mapping_manual1/_search
{
"query": {
"match": {
"name": "keyword1 keyword2 keyword2"
}
}
}
# 上边查询的含义是任何包含关键字 keyword1 或者 keyword2 或者keyword3都会查询出来
# 前提是设置好分词器,如果中文使用英文分词器可能会存在问题
# 查询结构顺序按照_score进行排序,内部排序算法是bm25
查询结果会统计命中几个关键字
match_all
# 查询所有全部数据
GET test_mapping_manual1/_search
{
"query": {
"match_all": {
}
}
}
# 等同于
GET test_mapping_manual1/_search
# 查询集群所有数据
GET _search
multi_match
# 这段含义是在字段name和desc中查找包含"John或者IT的内容的
GET test_mapping_manual1/_search
{
"query": {
"multi_match": {
"query": "John IT",
"fields": ["name","desc"]
}
}
}
# 语义: 默认分词器的对`John Smith`的分词结果为`John`和`Smith`
# name.last 中包含 `John` 或者 `Smith`
# OR
# name.first 中包含 `John` 或者 `Smith`
# 如果设置了"operator": "and",则中间 OR 的关系变为 AND
GET teacher/_search
{
"query": {
"multi_match": {
"query": "John Smith",
"type": "most_fields",
"fields": [
"name.last",
"name.first"
]
// ,"operator": "and"
}
}
}
match_phrase
短语搜索
短语搜索内部原理是先分词,分词之后需要命中每个分词,并且顺序要一直
# 这段含义先把name查询条件分词为John 和Tim
# 然后去source中把name字段的内容分词
# 分词之后需要同时命中John 和Tim并且顺序要一致
GET test_mapping_manual1/_search
{
"query": {
"match_phrase": {
"name": "John Tim"
}
}
}
验证分词
GET _analyze
{
"analyzer": "standard",
"text": "John Sam desc IT"
}
exact match
使用关键字term
term不会对搜索词分词
记住分词分两个部分,搜索词分词和源数据分词
keyword是不对source data的值分词
match_phase是分词的
所以重点来了:文章来源:https://www.toymoban.com/news/detail-578602.html
如果搜索词部分词,但是source data内容分词了,这时是无法查询数据的,因为建索引的时候索引已经分词了; 另外还需要注意一点一个字段要被搜索到一定要被索引到文章来源地址https://www.toymoban.com/news/detail-578602.html
GET test_mapping_manual1/_search
{
"query": {
"term": {
"name": "John Smith"
}
}
}
# 测试数据1
POST test_mapping_manual1/_doc
{
"name": "John Smith",
"age": 18,
"desc": "IT phone"
}
# 此案例无法查询出数据
到了这里,关于Elasticsearch ES 简单查询 Query String Search 入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!