У меня проблема с данными вasticsearch, в основном мне нужно хранить userID, которому принадлежат документы, указанные ниже. Я могу хорошо искать что-нибудь, кроме userID, если я просматриваю данные, в смысле я получаю ошибку «неверная строка» в userID поле.
В чем дело?
{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":3,"max_score":1.0,"hits":[{"_index":"pheme","_type":"searches","_id":"AU__X0W7bLxGTuBqZB_E","_score":1.0,"_source":{
userID: "AU__X0W7bLxGTuBqZB_E", **<---- This shows as bad string in Sense**
mustHave: "Laravel",
notHave: "Moogle",
couldHave: "AngularJS",
exclusions: {
ID : ""}
}
},{"_index":"pheme","_type":"searches","_id":"AU__ZNA0bLxGTuBqZCCn","_score":0.30685282,"_source":{
userID: "AU__X0W7bLxGTuBqZB_E",
mustHave: "Laravel",
notHave: "Moogle",
couldHave: "AngularJS",
exclusions: {
ID : ""}
}
},{"_index":"pheme","_type":"searches","_id":"AVAJl5OZbMFoS2ut2YM9","_score":0.30685282,"_source":{
userID: "AU__X0W7bLxGTuBqZB_E",
mustHave: "Laravel",
notHave: "Moogle",
couldHave: "AngularJS",
exclusions: {
ID : ""}
}
}]}}
Хорошо, проблема заключалась в том, как создавались данные, если вы заметили, что в моем примере над именами полей отсутствуют кавычки:
{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":3,"max_score":1.0,"hits":[{"_index":"pheme","_type":"searches","_id":"AU__X0W7bLxGTuBqZB_E","_score":1.0,"_source":{
userID: "AU__X0W7bLxGTuBqZB_E", **<---- This shows as bad string in Sense**
mustHave: "Laravel",
notHave: "Moogle",
couldHave: "AngularJS",
exclusions: {
ID : ""}
}
}
ДОЛЖНО БЫТЬ
{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":3,"max_score":1.0,"hits":[{"_index":"pheme","_type":"searches","_id":"AU__X0W7bLxGTuBqZB_E","_score":1.0,"_source":{
"userID": "AU__X0W7bLxGTuBqZB_E", **<---- This shows as bad string in Sense**
"mustHave": "Laravel",
"notHave": "Moogle",
"couldHave": "AngularJS",
"exclusions": {
"ID" : ""}
}
}
Важно отметить, что Sense под marvel не мешает вам вставлять недопустимые данные и что Elastic просто выведет эти данные на любой клиент, который вы используете, в PHP это вызовет JsonExceptionError, потому что недопустимый json не может быть закодирован в массив.
Также я неправильно делал отношения родитель / потомок, нет необходимости иметь поле для userID, при вставке записи вы просто указываете родителя, а затем запрашиваете, используя has_parent / filter.
Других решений пока нет …