ElasticSearch query/search/match -


i have inserted 3 records in elasticsearch index follows:

curl -xpost 'http://127.0.0.1:9200/geoindex_test/street?pretty=1'  -d ' { "citynames" : [ { "language" : "eng",     "name" : "w bridgewater",     "raw_name" : "w bridgewater"   },   { "language" : "eng",     "name" : "west bridgewater",     "raw_name" : "west bridgewater"   } ], "id" : 1,   "streetnames" : [ { "language" : "eng",     "name" : "cram rd",     "raw_name" : "cram rd"   } ] }'  curl -xpost 'http://127.0.0.1:9200/geoindex_test/street?pretty=1'  -d ' { "citynames" : [ { "language" : "eng",     "name" : "bridgewater corners",     "raw_name" : "bridgewater corners"   },   { "language" : "eng",     "name" : "bridgewater center",     "raw_name" : "bridgewater center"   } ], "id" : 2, "streetnames" : [ { "language" : "eng",     "name" : "valley view rd",     "raw_name" : "valley view rd"   } ] }'  curl -xpost 'http://127.0.0.1:9200/geoindex_test/street?pretty=1'  -d ' { "citynames" : [ { "language" : "eng",     "name" : "bridgewater",     "raw_name" : "bridgewater"   },   { "language" : "eng",     "name" : "windsor",     "raw_name" : "windsor"   } ], "id" : 3, "streetnames" : [ { "language" : "eng",     "name" : "valley view rd",     "raw_name" : "valley view rd"   } ] }' 

and perform search follows:

curl -xget 'http://127.0.0.1:9200/geoindex_test/street/_search?pretty=1'  -d ' { "query" : {     "match" : { "citynames.name" : "bridgewater" } } }' 

i thought elasticsearch return third record (id == 3) best match (record 3 exact match "bridgewater"), instead returns record id 1 (w bridgewater) best match. doing wrong?

i imagine happening because using inner objects collapse objects under it, 1 search purposes. when you're querying search field object 1, example, you're querying against ["w bridgewater", "west bridgewater"] , not discrete fields may imagine.

since 'bridgewater' appears twice in object 1 , 2 (two name fields) vs once in object 3, items rank higher in search. object 1 picked, because fields 'bridgewater' appears in shorter strings in object 2 ("w bridgewater" vs "bridgewater corners").

instead of using inner objects you're doing, use nested objects instead http://www.elasticsearch.org/guide/reference/mapping/nested-type/. setting score mode "max" make things match in more intuitive manner you.


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -