【发布时间】:2019-12-20 16:18:22
【问题描述】:
我的数据存储在弹性搜索下面的格式
{
"_index": "wallet",
"_type": "wallet",
"_id": "5dfcbe0a6ca963f84470d852",
"_score": 0.69321066,
"_source": {
"email": "test20011@gmail.com",
"wallet": "test20011@operatorqa2.akeodev.com",
"countryCode": "+91",
"phone": "7916318809",
"name": "test20011"
}
},
{
"_index": "wallet",
"_type": "wallet",
"_id": "5dfcbe0a6ca9634d1c70d856",
"_score": 0.69321066,
"_source": {
"email": "test50011@gmail.com",
"wallet": "test50011@operatorqa2.akeodev.com",
"countryCode": "+91",
"phone": "3483330496",
"name": "test50011"
}
},
{
"_index": "wallet",
"_type": "wallet",
"_id": "5dfcbe0a6ca96304b370d857",
"_score": 0.69321066,
"_source": {
"email": "test110021@gmail.com",
"wallet": "test110021@operatorqa2.akeodev.com",
"countryCode": "+91",
"phone": "2744697207",
"name": "test110021"
}
}
如果我们使用下面的查询,应该找不到记录
{
"query": {
"bool": {
"should": [
{
"match": {
"wallet": {
"query": "operatorqa2.akeodev.com",
"operator": "and"
}
}
},
{
"match": {
"email": {
"query": "operatorqa2.akeodev.com",
"operator": "and"
}
}
}
]
}
}
}
如果我在查询下方传递,记录应该找到
{
"query": {
"bool": {
"should": [
{
"match": {
"wallet": {
"query": "test20011@operatorqa2.akeodev.com",
"operator": "and"
}
}
},
{
"match": {
"email": {
"query": "test20011@operatorqa2.akeodev.com",
"operator": "and"
}
}
}
]
}
}
}
我已经在电子邮件和钱包字段上创建了索引。
每当用户通过电子邮件或钱包搜索数据时,我不确定用户发送的字符串是电子邮件还是钱包,所以我使用bool。
记录应该查找用户是否发送了完整的电子邮件地址或完整的电子钱包地址。 请帮助我找到解决方案
【问题讨论】:
-
您尝试在两个不同的字段(电子邮件和钱包)中搜索相同的字符串(电子邮件地址)。不幸的是,我很难理解
if we are using below string...。你能改写你的问题和期望吗? -
您能否添加您的 ES 索引的映射并告诉我们您使用的是哪个版本的 ES??
-
嗨,@DanielSchneiter 我在钱包和电子邮件字段上有一个索引。我从用户那里得到“operatorqa2.akeodev.com”,我需要从钱包或电子邮件字段中搜索值。无论从用户那里得到什么字符串,这个字符串都不会与我的 ES 中的任何数据匹配,但我正在获取数据。我的要求是,如果用户发送完整的字符串,如“test110011@operatorqa2.akeodev.com”,那么记录必须出现但如果我要控制数据“operatorqa2.akeodev.com”。来自用户然后记录不应该找到。