自己怎样制作公司网站,外国网站域名,无锡市建设工程质量监督站网站,镇江百度竞价一、创建索引 自动生成索引字段数据类型即自动映射
创建之前#xff0c;先删除索引防止重复创建 删除索引:
DELETE product_mapping创建索引 product_mapping并且赋值
PUT /product_mapping/_doc/1
{name: xiaomi phone,desc: s…一、创建索引 自动生成索引字段数据类型即自动映射
创建之前先删除索引防止重复创建 删除索引:
DELETE product_mapping创建索引 product_mapping并且赋值
PUT /product_mapping/_doc/1
{name: xiaomi phone,desc: shouji zhong de zhandouji,count: 123456,price: 123.123,date: 2020-05-20,isdel: false,tags: [xingjiabi,fashao,buka]
}执行结束:索引创建成功。
{_index : product_mapping,_type : _doc,_id : 1,_version : 1,result : created,_shards : {total : 2,successful : 1,failed : 0},_seq_no : 0,_primary_term : 1
}查询索引
GET product_mapping/_search执行结果:
{took : 0,timed_out : false,_shards : {total : 1,successful : 1,skipped : 0,failed : 0},hits : {total : {value : 1,relation : eq},max_score : 1.0,hits : [{_index : product_mapping,_type : _doc,_id : 1,_score : 1.0,_source : {name : xiaomi phone,desc : shouji zhong de zhandouji,count : 123456,price : 123.123,date : 2020-05-20,isdel : false,tags : [xingjiabi,fashao,buka]}}]}
}
查询索引自动生成的映射
GET product_mapping/_mapping结果如下:
{product_mapping : {mappings : {properties : {count : {type : long},date : {type : date},desc : {type : text,fields : {keyword : {type : keyword,ignore_above : 256}}},isdel : {type : boolean},name : {type : text,fields : {keyword : {type : keyword,ignore_above : 256}}},price : {type : float},tags : {type : text,fields : {keyword : {type : keyword,ignore_above : 256}}}}}}
}
总结: 根据put创建索引赋值的时候每个字段的数据动态的生成了字段的属性可以类比mysql的表结构的字段属性这里重点介绍一下text类型即文本类型在创建索引的时候如果是text类型的那么会对这个字段进行索引生成倒排索引进行存储后续查询的时候如果查询方式也支持对搜索的内容进行索引分词那么就会把搜索条件分词后的词项和生成索引的时候索引的列的词项进行匹配。
fields : {keyword : {type : keyword,ignore_above : 256}}这个keyword不会分词如果text需要精准匹配可以用该字段的keyword. 1.“name”: “xiaomi phone”,在创建索引的时候这个会被分词为xiaomi 和 phone两个词项下面的查询方式 搜索内容无论是xiaomi 或者 phone 还是两个顺序颠倒都能匹配到因为会对搜索条件进行分词为xiaomi 或者 phone匹配索引分词后的词根会匹配到。
GET product_mapping/_search
{query: {match: {name: phone xiaomi }}
}name.keyword 就是查询索引中name分词前为xiaomi 的内容因为name分词前只有xiaomi phone所以这样查询不到
GET product_mapping/_search
{query: {match: {name.keyword: xiaomi }}
}下面这样的方式可以匹配的到
GET product_mapping/_search
{query: {match: {name.keyword: xiaomi phone}}
}二、创建索引 手动映射数据类型
手动创建索引和mapping映射
PUT /product
{mappings: {properties: {date: {type: text},desc: {type: text,analyzer: english},name: {type: text,index: false},price: {type: long},tags: {type: text,index: true},parts: {type: object},partlist: {type: nested}}}
}name的属性index: false表示创建索引的时候不进行分词。
GET /product/_search
{query: {match: {name: xiaomi}}
}执行会报错
{error : {root_cause : [{type : query_shard_exception,reason : failed to create query: Cannot search on field [name] since it is not indexed.,index_uuid : wEUFSz6VQmaC6Ko9oE3cxQ,index : product}],type : search_phase_execution_exception,reason : all shards failed,phase : query,grouped : true,failed_shards : [{shard : 0,index : product,node : QaQYrOAFRr2kwyt6IuJU9Q,reason : {type : query_shard_exception,reason : failed to create query: Cannot search on field [name] since it is not indexed.,index_uuid : wEUFSz6VQmaC6Ko9oE3cxQ,index : product,caused_by : {type : illegal_argument_exception,reason : Cannot search on field [name] since it is not indexed.}}}]},status : 400
}