数据来源是由 图片url,图片descript,图片keywords 外加一个id
基于此首先创建 索引,
keywords是一组由单词或词组 组成的一组数据,所以以数组形式压入数据:
descript 是由两条语句组合成的数据(针对图片的两种不同描述)
# 这里创建的keywords 数组元素类型为text,即可以模糊匹配
PUT /img-search/
{
"mappings":{
"properties":{
"id":{
"type": "long"
},
"keywords":{
"type":"text"
},
"descript":{
"type":"text"
},
"url":{
"type":"keyword"
}
}
}
}
#这里创建的keywords 数组元素为keyword ,只能是精确匹配数组中的元素
PUT /pic-search/
{
"mappings":{
"properties":{
"id":{
"type": "long"
},
"keywords":{
"type":"keyword"
},
"descript":{
"type":"text"
},
"url":{
"type":"keyword"
}
}
}
}
然后倒入提前准备好的数据:
curl -X POST "http://121.36.xxx.xx:xxxx/img-search/_bulk" -H "Content-Type: application/json" --data-binary "@data.json"
data.json 文件的内容如下:
# 格式需要严格按照如下形式
{"index":{"_index":"img-search","_id":"002"}}
{"id":1,"keywords":["fly","wing","bird","crane","egret","stretch","flight","large","spread","white","heron","beak","sky","cloudy"],"descript":"'white bird in flight over a grey background', 'white bird in flight on a white background'","url":"baidu.com"}
清空img-search 索引下的数据:
#kibana 界面操作
POST /img-search/_delete_by_query
{
"query":{
"match_all":{}
}
}
在Elasticsearch中,处理某个字段有多个值的情况可以采用不同的方法,具体取决于你的查询需求以及数据的性质。以下是两种主要的方法
1.数组字段:将该字段创建为一个数组(或者Elasticsearch中的nested字段,更复杂的数据结构)。这种方法适用于字段的多个值之间具有关联性,你希望能够对这些值进行聚合、过滤和查询。例如,如果你有一个文档表示一本书,可以将作者字段设计为数组,以便容纳多位作者。
优点:
可以使用Elasticsearch的聚合功能对多个值进行分析。
可以更容易地进行复杂的查询,例如搜索包含指定作者的所有书籍。
缺点:
使用数组会增加索引的复杂性和存储开销
2.多个字段串连接:将多个值连接成一个长字符串,并将其作为单个字段存储。这种方法适用于字段的多个值之间没有关联性,或者你只关心字段的文本表示形式。你可以使用分隔符将多个值连接在一起。
优点:
索引和存储开销较低。
可以简化索引映射和查询。
缺点:
不适用于需要对多个值进行聚合或复杂查询的情况。
所以考虑到后期可能会对图片提取词进行聚合分类查询
这里选择数组类型存储keywords