@econgineer Excellent Beitrag.
Ich wollte dies für eine ES-Abfrage, um versuchen wir arbeiten - aber ich bin zu faul, um die JSON-Daten zu halten tun ....
Ich denke, dieser Code funktioniert ... seltsam verursacht es jq zu beschweren, aber Elasticsearch Arbeit ....
import json
import pprint
from collections import defaultdict
nested_dict = lambda: defaultdict(nested_dict)
query=nested_dict()
query['span_near']['clauses']=list()
query['slop']='1'
query['in_order']="true"
words=['what','is','this']
for w in words:
nest = nested_dict()
nest["span_multi"]["match"]["fuzzy"]["msg"]["fuzziness"]["value"]=w
nest["span_multi"]["match"]["fuzzy"]["msg"]["fuzziness"]["fuzziness"]="2"
json.dumps(nest)
query['span_near']['clauses'].append(json.loads(json.dumps(nest)))
pprint.pprint(json.loads(json.dumps(query)))
Wenn Sie die Ausgabe von
cat t2.json | tr "\'" "\"" | jq '.'
verschönern sollten Sie sehen etwas wie
{
"in_order": "true",
"slop": "1",
"span_near": {
"clauses": [
{
"span_multi": {
"match": {
"fuzzy": {
"msg": {
"fuzziness": {
"fuzziness": "2",
"value": "what"
}
}
}
}
}
},
{
"span_multi": {
"match": {
"fuzzy": {
"msg": {
"fuzziness": {
"fuzziness": "2",
"value": "is"
}
}
}
}
}
},
{
"span_multi": {
"match": {
"fuzzy": {
"msg": {
"fuzziness": {
"fuzziness": "2",
"value": "this"
}
}
}
}
}
}
]
}
}
Und dann ES abfragen es
curl --silent My_ES_Server:9200:/INDEX/_search -d @t2.json
Vielen Dank für die erste Führung nur normal ist, ich hoffe, dass jemand anderes diese Verwendung finden.
Wie kann man einen der machen 'optional sein span_multi'? – perrohunter