Every field in a document is indexed and can be queried.
搜索可以分为以下类型
- structured query on concrete fields like
gender
orage
, sorted by a field likejoin_date
, similar to the type of query that you could construct in SQL(filter,过滤结果可以被缓存) - A full-text query, which finds all documents matching the search keywords, and returns them sorted by relevance(query,全文检索,返回与搜索条件相关的documen)
- A combination of the two
1.mapping 类似于关系型数据中的表结构。虽然es是no-schema存储,但mapping的设置会影响到搜索结果。
2.Analysis 文档是样被分词和索引的。
3.Query DSL 用于查询的语言
GET /_search
空查询。ES中的检索可以使用url也可以使用Query DSL 推荐使用Query DSL.
multi-search
分页查询
from: size
{
"query":{
"match_all":{
}
},
"from":6,
"size":9
}
分布式分页:当数据非常多的时候查询最后几页不推荐使用from size。比如100页,每页10条。当查询第91页时,需要将第91页之前所有的数据全部取出来,在取第91页的数据。海量数据做排序严重影响分页性能。关于分布式存储的分页问题我们以后再会做深入研究。
mapping and analysis
GET /index/_mapping/type
exact values versus full text
在ES中数据分为两种类型:数值类型(?真实类型)与文本类型。Exact values are easy to query. The decision is binary; a value either matches the query, or it doesn’t.
真实类型容易查询。查询结果只有两种,符合或者不符合。
全文检索不容易查询。语言的语义复杂。程序很难辨别。查询结果与查询条件的相关性如何。
inverted index
与索引相对。正向索引是为了更快速的定位数据。反向索引是将文本分词,将词元与文档建立对应关系。analysis and analyzers
Analysis is a process that consists of the following:
- First, tokenizing a block of text into individual terms suitable for use in an inverted index,
- Then normalizing these terms into a standard form to improve their “searchability,” or recall
How to test a analyzer.
GET /_analyze?analyzer=standard(analyzer name) -d "text to analyze"
mapping
为了能够将日期字段作为日期、数字领域数字,和字符串字段作为全文或精确值字符串,Elasticsearch需要知道每个字段包含什么类型的数据。这些信息都包含在映射中()
{
"mappings":{
"index":{
"properties":{
"abc":{
"type":"string",
"index":"analyze",
"analyzer":"ik"
}
}
}
}
}
complex core field types
null
values, arrays, and objects
type
of the new field.