I\'ve got three documents with a \"userName\" field:
when i search for \'brian\'
I think that you're not doing exactly what you think you're doing. This is why it is useful to present an actual test case with full curl statements, rather than abbreviating it.
Your example above works for me (slightly modified):
Create the index with settings and mapping:
curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1' -d '
{
"mappings" : {
"test" : {
"properties" : {
"userName" : {
"fields" : {
"autocomplete" : {
"search_analyzer" : "username_search",
"index_analyzer" : "username_index",
"type" : "string"
},
"userName" : {
"index" : "not_analyzed",
"type" : "string"
}
},
"type" : "multi_field"
}
}
}
},
"settings" : {
"analysis" : {
"filter" : {
"username_ngram" : {
"max_gram" : 15,
"min_gram" : 1,
"type" : "edge_ngram"
}
},
"analyzer" : {
"username_index" : {
"filter" : [
"lowercase",
"username_ngram"
],
"tokenizer" : "keyword"
},
"username_search" : {
"filter" : [
"lowercase"
],
"tokenizer" : "keyword"
}
}
}
}
}
'
Index some data:
curl -XPOST 'http://127.0.0.1:9200/test/test?pretty=1' -d '{
"userName" : "briangriffen"
}
'
curl -XPOST 'http://127.0.0.1:9200/test/test?pretty=1' -d '
{
"userName" : "brianlilley"
}
'
curl -XPOST 'http://127.0.0.1:9200/test/test?pretty=1' -d '
{
"userName" : "briangumble"
}
'
A search for brian finds all documents:
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d '{
"query" : {
"match" : {
"userName.autocomplete" : "brian"
}
}
}
'
# {
# "hits" : {
# "hits" : [
# {
# "_source" : {
# "userName" : "briangriffen"
# },
# "_score" : 0.1486337,
# "_index" : "test",
# "_id" : "AWzezvEFRIykOAr75QbtcQ",
# "_type" : "test"
# },
# {
# "_source" : {
# "userName" : "briangumble"
# },
# "_score" : 0.1486337,
# "_index" : "test",
# "_id" : "qIABuMOiTyuxLOiFOzcURg",
# "_type" : "test"
# },
# {
# "_source" : {
# "userName" : "brianlilley"
# },
# "_score" : 0.076713204,
# "_index" : "test",
# "_id" : "fGgTITKvR6GJXI_cqA4Vzg",
# "_type" : "test"
# }
# ],
# "max_score" : 0.1486337,
# "total" : 3
# },
# "timed_out" : false,
# "_shards" : {
# "failed" : 0,
# "successful" : 5,
# "total" : 5
# },
# "took" : 8
# }
A search for brianlilley finds just that document:
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d '
{
"query" : {
"match" : {
"userName.autocomplete" : "brianlilley"
}
}
}
'
# {
# "hits" : {
# "hits" : [
# {
# "_source" : {
# "userName" : "brianlilley"
# },
# "_score" : 0.076713204,
# "_index" : "test",
# "_id" : "fGgTITKvR6GJXI_cqA4Vzg",
# "_type" : "test"
# }
# ],
# "max_score" : 0.076713204,
# "total" : 1
# },
# "timed_out" : false,
# "_shards" : {
# "failed" : 0,
# "successful" : 5,
# "total" : 5
# },
# "took" : 4
# }