搜索引擎项目组

大背景:

        本章节将记录搜索项目里碰到的一些问题,这些问题一般刚入门时根本不会注意到,但是这些问题会让你付出惨痛的代价。

一、搜索的字段里包含大写字母

        背景:2015-05-27,做了一个ERP订单搜索的需求,索引建完,做了一下搜索测试,通过ID搜索(id=1)OK,通过状态搜索(status=1)OK,通过orderSn搜索(orderSn=B50512232123213)FAILED,查了一下索引,明明是有这个orderSn的,为什么查不出来?

        原因:elasticsearch默认的分词器在建索引时自动把大写字母变成了小写,在配置文件里指定WhitespaceAnalyzerProvider,会以空白字符分词,同时不会自动把大写转为小写。

        解决:在elasticsearch的配置文件elasticsearch.yml 最后加入下面配置

script.disable_dynamic: false
  
index:
   analysis:
     analyzer:
       default :
         type: org.elasticsearch.index.analysis.WhitespaceAnalyzerProvider
         tokenizer: whitespace

        总结:这个问题,刚入门真的真的很难发现,我是查了两个小时后,问Rich解决的。

 

二、时间字段建索引时的特殊处理

        背景:需要对时间做范围搜索,必须先对这个字段进行特殊处理,如果不做特殊处理,这个范围查询查出来的结果不能保证是正确的,尽管他有时候是正确的。这个是Rich直接告诉我的,所以连出错的机会都没有,节省下来的时间用来记录这些问题。

        原因:暂不知道什么原因

        解决:把时间建索引的时候,需要修改一下这个字段的mapping,在建索引前添加以下代码

//更新mapping,有日期字段时需要执行
XContentBuilder builder = null ;
try {
      builder = XContentFactory.jsonBuilder()
            .startObject()
            .startObject(typeName)
            .field( "dynamic_date_formats" , "yyyy-MM-dd HH:mm:ss" )
            .endObject()
            .endObject();
} catch (IOException e) {
       e.printStackTrace();
}
ElasticFactory.createMapping(indexName, typeName, builder);

        总结:感谢CCTV,在我还没有出现过这个错误的时候,就已经把这个问题解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值