ES的记录

本文分享了一次解决搜索引擎中索引设计和分词器配置问题的经验,详细介绍了使用ik分词器与拼音分词相结合的方法,并给出了具体的Elasticsearch设置及查询案例。

昨天做了好久,一直查不出来,后来发现是我的索引设计和分词器设计有问题。

创建索引

  "settings": {
    "analysis": {
      "analyzer": {
        "my_pinyin": {
          "tokenizer": "ik_smart",
          "filter": [
            "pinyin"
          ]
        }
      },
      "filter": {
        "pinyin": {
          "type": "pinyin",
          "keep_full_pinyin": true,
          "keep_joined_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_length": 16,
          "remove_duplicated_term": true
        }
      }
    }

这是把ik分词器当做主要分词,拼音分词次要。

 "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "title": {
        "type": "completion",
        "analyzer": "my_pinyin"
      },
      "name": {
        "type": "text",
        "analyzer": "my_pinyin"
      },
      
      "cover_bucket":{
        "type": "keyword"
      },
       "cover_object":{
        "type": "keyword"
      }
    }
  }

一开始写错了,除了定义了一个analyzer,还另外写了一个search-analyzer,所以就不对了,多此一举。

相关查询

1.matchQuery

SearchSourceBuilder sourceBuilder= new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("name","手机"))

2.termQuey

SearchSourceBuilder sourceBuilder= new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("name","手机"))

上述两种搜索都是基本搜索,但是前者是知道有分词器的存在,后者是不知道分词器的存在(适合keyword,datetime,int类型)

3.排序搜索

 sourceBuilder.sort(searchParamDTO.getSortBy(),searchParamDTO.getDesc()? SortOrder.ASC: SortOrder.DESC);

4.高亮搜索

  HighlightBuilder highlightBuilder = new HighlightBuilder();            
highlightBuilder.field(SearchConstants.DEFAULT_SEARCH_FIELD).preTags(SearchConstants.DEFAULT_PRE_TAG).postTags(SearchConstants.DEFAULT_POST_TAG);
 sourceBuilder.highlighter(highlightBuilder);

5.范围搜索

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();  
boolQueryBuilder.filter(QueryBuilders.rangeQuery(key).gt(first).lt(end));

  大于小于等于

6.模糊搜索

  FuzzyQueryBuilder fuzzyQuery = new FuzzyQueryBuilder("name","手机");
  fuzzyQuery.fuzziness(Fuzziness.TWO);

默认模糊搜索的度最大是2。

7.分页

 sourceBuilder.from(searchParamDTO.getFrom());//分页
 sourceBuilder.size(searchParamDTO.getSize());

看了还有聚合搜索什么的 我得好好看看了。886

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值