elasticsearch对数组进行搜索
写在前面
我们在进行全文建搜的时候往往会添加很多前置条件,比如地区,时间,以及知识点树,我们需要在搜索之前先进行过滤在进行搜索.
Array索引
es的数据类型中实际上是不包含数组类型的,在默认的情况下任何字段都可以包含0或者是更多的值,并且全部的值在这个数组中必须保持一致
In Elasticsearch, there is no dedicated array type. Any field can contain zero or more values by default, however, all values in the array must be of the same datatype. For instance:
- an array of strings: [ “one”, “two” ]
- an array of integers: [ 1, 2 ]
- [ 1, 2, 3 ]
- an array of objects: [ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }]
NOTE
如果你想在数组中使用Object的类型,这种情况下是不被允许的,我们如果想使用Object就必须通过设置nested字段来生命这是一个对象数组!!
我们的映射字段不需要进行任何的配置,在默认的情况下我们就可以使用数组,这是开箱即用的:
{
"mappings": {
"test": {
"properties": {
"id": {
"type": "long"
},
"points": {
"type": "long"
},
"stem": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 2048
}
},
"analyzer": "ik_smart"
},
"choose": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 2048
}
}
}
}
}
}
}
添加一条测试数据
{
"id":1,
"stem":"今天天气真好啊",
"choose":["诶呀我去","连上了"],
"points":[23,31,53]
}
- 1
- 2
- 3
- 4
- 5
- 6
这里我直接指定了几个基本的属性,对同一个字段保存多个值进行测试
Array搜索
数组字段的搜索很简单,我们平时遇到的场景也有很多,就像前文中提到的,当我们需要根据多个先决条件进行搜索的时候.
这里points保存了知识点的数组(有多个值构成),在搜素的时候我们为了保证该试题下包含所有的内容,就是用bool的must进行多个字段的搜索,实例如下:
{
"query": {
"bool": {
"must": [
{
"term": {
"points": {
"value": "23"
}
}
},{
"term": {
"points": {
"value": "31"
}
}
},
{
"term": {
"points": {
"value": "53"
}
}
}
]
}
}
}
搜索的结果可想而知,所有所有的内容都必须包含上述的三级知识点,如果需要不同级别的知识点,只需要对搜索条件进行调整即可.
{
"_index": "test_drup",
"_type": "test",
"_id": "1",
"_score": 3,
"_source": {
"id": 1,
"stem": "今天天气真好啊",
"choose": [
"诶呀我去",
"连上了"
],
"points": [
23,
31,
53
]
}
}
- 1
- 索结果只展示一部分
转载: https://blog.csdn.net/qq_19663899/article/details/84945915
参考: https://www.cnblogs.com/ljhdo/p/4904430.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?