我对Elastic世界是非常,并且在理解某些操作背后的逻辑时遇到了很多麻烦。 当前正在研究和尝试很多东西,所以我现在有点困惑,需要一些提示。
场景。
我在client
索引中有以下(clients
类型)文档(不用担心:名字是足球运动员,电话号码不是真实的):
{
"firstName" : "Alessandro",
"lastName" : "Nesta",
"phoneNumber" : "+3949304903",
"merchantId" : "90339203812831293"
},
{
"firstName" : "Alessandro",
"lastName" : "Del Piero",
"phoneNumber" : "+39129302902",
"merchantId" : "90339203812831293"
},
{
"firstName" : "Alessandro",
"lastName" : "Costacurta",
"phoneNumber" : "+39098921321",
"merchantId" : "1239021392839238"
}
现在,我正在寻找的搜索查询基本上是这样做的:给定一个merchantId
和一个查询字符串,请尝试在firstName或lastName内查找查询字符串,但请确保商人ID完全一样在查询中传递。
假设我在SQL世界中有一个查询字符串“ Aless”和一个商人ID“ 90339203812831293”:
SELECT
*
FROM
`clients`
WHERE
`merchantId` = "90339203812831293"
AND
(
`firstName` LIKE "Aless%" OR `lastName` LIKE "Aless%"
);
结果应该是:
{
"firstName" : "Alessandro",
"lastName" : "Nesta",
"phoneNumber" : "+3949304903",
"merchantId" : "90339203812831293"
},
{
"firstName" : "Alessandro",
"lastName" : "Del Piero",
"phoneNumber" : "+39129302902",
"merchantId" : "90339203812831293"
}
我尝试了什么?基本上与组合不同,从将vendorId放入过滤器部分到multi_match。
{
"query": {
"bool": {
"should": [
{
"wildcard": {
"firstName": "aless*"
}
},
{
"wildcard": {
"lastName": "aless*"
}
}
],
"must": {
"match": {
"merchantId": "90339203812831293"
}
}
}
}
0个结果(如果我删除了vendorId部分,效果很好)。
我也尝试过使用查询字符串:
{
"query": {
"bool": {
"must": {
"query_string": {
"query": "Del*",
"fields": [
"firstName",
"lastName"
]
}
},
"filter": {
"term": {
"merchantId": "90339203812831293"
}
}
}
}
}
同样的问题。 能否请我指出我做错了什么? 预先感谢!
答案 0 :(得分:0)
这是令人难以置信的,经过一天的无奈尝试,我一问到这里,我终于找到了解决方法:
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "Aless*",
"fields": [
"firstName",
"lastName"
]
}
},
{
"match": {
"merchant_id": "90339203812831293"
}
}
]
}
}
}
但是,我非常愿意接受新的解决方案,因为我敢肯定这不是最好的解决方案。 如果需要,我什至可以修改文档的结构。
谢谢!
答案 1 :(得分:0)
您尝试过多重匹配吗?
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "Aless",
"fields": ["firstName", "lastName"]
}
},
{
"match": {
"merchant_id": "90339203812831293"
}
}
]
}
}
}
或
{
"query": {
"bool": {
"must":
{
"multi_match": {
"query": "Aless",
"fields": ["firstname", "lastname"]
}
},
"filter": {
"term": {
"merchant_id": "90339203812831293"
}
}
}
}
}