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)))
{'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'}}}}}}]}}
{"query":
{
"span_near": {
"clauses": [
{
"span_multi": {
"match": {
"fuzzy": {
"content": {
"fuzziness": "2",
"value": "word"
}
}
}
}
},
{
"span_multi": {
"match": {
"fuzzy": {
"content": {
"fuzziness": "2",
"value": "another"
}
}
}
}
}
],
"slop": 1,
"in_order": "true"
Building a slightly more complex query for ES. Not working as I had thought it would... so more research needed.