如何在elasticsearch中搜索字段数组
How to search array of fields in elasticsearch
我在弹性搜索中有一个名为 professor
的索引
如果对于交叉字段我需要“AND”条件
对于相同的字段数组,我需要 OR 条件
- 我需要搜索
subject
这是 Physics
或 Accounting
这是字段数组 (OR) 语句
- 我需要搜索
type
是Permanent
(&)条件
- 我要搜索
Location
是NY
(&)条件
- 有可能 {'type':['Contract','Guest']} 类型也作为列表出现
test = [{'id':1,'name': 'A','subject': ['Maths','Accounting'],'type':'Contract', 'Location':'NY'},
{ 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'},
{'id':3,'name': 'ABC','subject': ['Maths','Engineering'],'type':'Permanent','Location':'NY'}]
查询如下,第3个知道了,如何添加1 and 2
content_search = es.search(index="professor", body={
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"term": {
"Location.keyword": "NY"
}
}
]
}
}
})
content_search ['hits']['hits']
预计是id [{ 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'}]
You need to use the bool query, to wrap all your conditions
添加一个工作示例,其中包含索引数据(与所讨论的相同)、搜索查询和搜索结果
搜索查询:
{
"query": {
"bool": {
"must": [
{
"match": {
"type.keyword": "Permanent"
}
},
{
"match": {
"Location.keyword": "NY"
}
}
],
"should": [
{
"match": {
"subject.keyword": "Accounting"
}
},
{
"match": {
"subject.keyword": "Physics"
}
}
],
"minimum_should_match": 1,
"boost": 1.0
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64370980",
"_type": "_doc",
"_id": "2",
"_score": 1.8365774,
"_source": {
"id": 2,
"name": "AB",
"subject": [
"Physics",
"Engineering"
],
"type": "Permanent",
"Location": "NY"
}
}
]
我在弹性搜索中有一个名为 professor
如果对于交叉字段我需要“AND”条件
对于相同的字段数组,我需要 OR 条件
- 我需要搜索
subject
这是Physics
或Accounting
这是字段数组 (OR) 语句 - 我需要搜索
type
是Permanent
(&)条件 - 我要搜索
Location
是NY
(&)条件 - 有可能 {'type':['Contract','Guest']} 类型也作为列表出现
test = [{'id':1,'name': 'A','subject': ['Maths','Accounting'],'type':'Contract', 'Location':'NY'},
{ 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'},
{'id':3,'name': 'ABC','subject': ['Maths','Engineering'],'type':'Permanent','Location':'NY'}]
查询如下,第3个知道了,如何添加1 and 2
content_search = es.search(index="professor", body={
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"term": {
"Location.keyword": "NY"
}
}
]
}
}
})
content_search ['hits']['hits']
预计是id [{ 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'}]
You need to use the bool query, to wrap all your conditions
添加一个工作示例,其中包含索引数据(与所讨论的相同)、搜索查询和搜索结果
搜索查询:
{
"query": {
"bool": {
"must": [
{
"match": {
"type.keyword": "Permanent"
}
},
{
"match": {
"Location.keyword": "NY"
}
}
],
"should": [
{
"match": {
"subject.keyword": "Accounting"
}
},
{
"match": {
"subject.keyword": "Physics"
}
}
],
"minimum_should_match": 1,
"boost": 1.0
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64370980",
"_type": "_doc",
"_id": "2",
"_score": 1.8365774,
"_source": {
"id": 2,
"name": "AB",
"subject": [
"Physics",
"Engineering"
],
"type": "Permanent",
"Location": "NY"
}
}
]