java-Elastic Search-通过字段的开始字符获取记录

我正在使用Elastic Search Server.我需要获取基于源JSON中字段值的起始字符的记录.

 

JSON:

 

Index JSON1 : "{\"id\":\"1\",\"message\":\"welcome to elastic search\"}"
Index JSON2 : "{\"id\":\"1\",\"message\":\"Hellow world\"}"

码:

 

String selectedCharacter = "w";
PrefixQueryBuilder queryBuilder = QueryBuilders.prefixQuery("message", selectedCharacter);
builder.setQuery(queryBuilder);

通过使用上面的代码,我得到了两个记录.我只需要’Index JSON1′.请提供任何解决方案来实现此目的.提前致谢.

最佳答案

默认情况下,Elasticsearch将“标记化”字符串字段.

 

这意味着您的消息字段被视为多个术语字段.对于JSON1:[“ welcome”,“ to”,“ elastic”,“ search”]和JSON2:[“ Hellow”,“ world”].

当您进行查询时,ElasticSearch会尝试匹配该术语,这就是为什么您为“ welcome”术语获得JSON1而为“ world”术语获得JSON2的原因.

如果希望您的消息字段是“未令牌化的”(视为单个字符串),则必须显式设置此字段到关键字的映射.这是通过使用Mapping API完成的.

您可以看一下:

>关键字分析工具doc:http://www.elasticsearch.org/guide/reference/index-modules/analysis/keyword-analyzer/
>映射API文档:http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/

如果需要关键字分析器但不区分大小写,则需要使用小写过滤器定义自定义分析器(您可能需要为此删除并重新创建索引).例如:

 

$curl -XPUT 'localhost:9200/test/_settings' -d '
  {
    "index": {
      "analysis" : {
        "analyzer" : {
          "lowercaseAnalyzer": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": ["lowercase"]
          }
        }
      }
    }
  }

然后,您可以使用此自定义分析器(而不是关键字)定义映射:

 

"message" : {"type" : "string", "analyzer" : "lowercaseAnalyzer"}

您还可以使用分析API测试分析仪.例如:

 

$curl -XGET 'localhost:9200/test/_analyze?analyzer=lowercaseAnalyzer&pretty=true' -d 'Hello world'
{
  "tokens" : [ {
    "token" : "hello world",
    "start_offset" : 0,
    "end_offset" : 11,
    "type" : "word",
    "position" : 1
  } ]
}

您可以在分析文档中查看所有可用的标记生成器和过滤器:http://www.elasticsearch.org/guide/reference/index-modules/analysis/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值