W moim previous question zostałem wprowadzony do fields
w zapytaniu query_string
i jak może mi ono pomóc w przeszukiwaniu zagnieżdżonych pól dokumentu.Sposób korzystania z pól `gt` i` fields 'w tym samym zapytaniu w Elasticsearch
{
"query": {
"query_string": {
"fields": ["*.id","id"],
"query": "2"
}
}
}
Ale działa tylko w dopasowywaniu, co jeśli chcę zrobić porównanie? Po pewnym przeczytaniu i przetestowaniu wydaje się, że zapytania takie jak range
nie obsługują fields
. Czy istnieje sposób, aby wykonać kwerendę range
, np. w dniu, nad polem, które może być rozproszone w dowolnym miejscu w hierarchii dokumentów?
czyli biorąc pod uwagę następujący dokument:
{
"id" : 1,
"Comment" : "Comment 1",
"date" : "2016-08-16T15:22:36.967489",
"Reply" : [ {
"id" : 2,
"Comment" : "Inner comment",
"date" : "2016-08-16T16:22:36.967489"
} ]
}
Czy istnieje kwerenda poszukiwania na polu date
(jak date > '2016-08-16T16:00:00.000000'
), który pasuje do danego dokumentu, ponieważ pola zagnieżdżonego, bez wyraźnie podając adres, na Reply.date
? Coś takiego (wiem następujące zapytanie jest niepoprawne):
{
"query": {
"range" : {
"date" : {
"gte" : "2016-08-16T16:00:00.000000",
},
"fields": ["date", "*.date"]
}
}
}
mógłbyś wyjaśnić/odnoszą się do dokumentacji w kapelusz "\ *" robi? A czy powinienem używać "pól" jak poprzednio? – Mehran
Jest w dokumencie [składnia zapytania w zapytaniu łańcuchowym] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_field_names) w polu "Pole nazwy ". Nie musisz używać 'fields' w ogóle, wildcard czyni to niepotrzebnym. '\ * date' oznacza dowolne pole kończące się na' date' (włącznie z zagnieżdżonymi). Odwrotny ukośnik występuje, ponieważ musimy uciec z symbolu wieloznacznego '*', który jest zastrzeżonym znakiem w składni łańcucha zapytania. – Val