elastic 之所以日此快(甚至比mysql主键查询还要快)是因为使用了倒排索引,简单说是由属性值来确定记录的位置。Elasticsearch 还做了许多针对性的优化,当我们对两个字段进行检索时,就可以利用 Bitmap(有值为1,无值为0)进行优化and查询直接通过位与计算便可得出结果。
Name Posting List name=zhangsan [1,3,5] age=18 [1,2,4,5] [1, 3, 5] ⇒ 10101 [1, 2, 4, 5] ⇒ 11011
- 这样两个二进制数组求与便可得出结果:
10001 ⇒ [1, 5]
新建字段
- 不指定字段类型默认text
#POST rpt_nginx_log/_mapping
{
"properties": {
"field_name": {
"type": "keyword"
}
}
}
#nested新建字段
#PUT drug_patent_public/_doc/_mapping?include_type_name=true
{
"properties": {
"patent_list": {
"type": "nested",
"properties": {
"patent_id": {
"type": "integer"
},
"name": {
"type": "keyword",
"norms": false,
"doc_values": false
}
}
}
}
}
优化
#PUT reviewcase_fulltmap/_settings
{
"index.merge.scheduler.max_merge_count": 100
}
其他
# 与query 同级 获取真实总条数
"track_total_hits": true,
#分词查询
#POST _analyze
{
"text": "中华人民共和国"
}
{
"analyzer": "ik_smart",
"text": "中华人民共和国"
}