前缀查询在ElasticSearch中不起作用

vks*_*ghh 2 prefix elasticsearch

我已将以下链接中的'accounts.json'数据加载到我机器上的ES实例中:

https://www.elastic.co/guide/en/elasticsearch/reference/1.5/_exploring_your_data.html

这会将1000个文档添加到索引"bank"中,类型为"account".很简单!

每个doc都有这种结构:

{
    "account_number": 0,
    "balance": 16623,
    "firstname": "Bradshaw",
    "lastname": "Mckenzie",
    "age": 29,
    "gender": "F",
    "address": "244 Columbus Place",
    "employer": "Euron",
    "email": "bradshawmckenzie@euron.com",
    "city": "Hobucken",
    "state": "CO"
}
Run Code Online (Sandbox Code Playgroud)

现在我试图在这个索引上运行一个简单的'前缀'查询.

这是一个很好的工作(回来时有很多正确的结果):

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "prefix" : { "address" : "963" } }
}'
Run Code Online (Sandbox Code Playgroud)

这是另一个(这个不起作用):

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "prefix" : { "firstname" : "Op" } }
}'
Run Code Online (Sandbox Code Playgroud)

但是肯定有一个记录存在,应该在之前的请求中返回.以下作品:

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match" : { "firstname" : "Opal" } }
}'
Run Code Online (Sandbox Code Playgroud)

我还验证了映射,并且在'firstname'和'address'这两个字段中似乎没有任何区别:

curl -XGET 'localhost:9200/bank/_mapping/account?pretty'
Run Code Online (Sandbox Code Playgroud)

以下是这些2的相关映射部分:

 "address": {
     "type": "string"
 }

 "firstname": {
     "type": "string"
 }
Run Code Online (Sandbox Code Playgroud)

无法弄清楚为什么一个前缀查询有效而另一个没有.关于我缺少什么的任何指示?

Slo*_*ens 7

我想你会发现这会做你期望的事情:

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "prefix" : { "firstname" : "op" } }
}'
Run Code Online (Sandbox Code Playgroud)

原因是,由于您未指定分析器,因此使用标准分析器,将标记转换为小写.

这是我用来测试我怀疑的一些代码:

http://sense.qbox.io/gist/a4f087cee78fd694dd4223eb56e842e1cd1d5847