前缀查询在ElasticSearch

时间:2015-11-16 18:42:57

标签: elasticsearch prefix

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

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

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

每个文档都有这种结构:

{
    "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"
}

现在我正在尝试对此索引运行一个简单的'前缀'查询。

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

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "prefix" : { "address" : "963" } }
}'

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

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "prefix" : { "firstname" : "Op" } }
}'

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

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match" : { "firstname" : "Opal" } }
}'

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

curl -XGET 'localhost:9200/bank/_mapping/account?pretty'

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

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

 "firstname": {
     "type": "string"
 }

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

1 个答案:

答案 0 :(得分:6)

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

package com.example.william.better_gps;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

    Toast.makeText(context, "message", Toast.LENGTH_LONG).show();

}
}

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

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

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