Elasticsearch中analyzer和search_analyzer的区别

如果想要在创建索引和查询时分别使用不同的分词器,ElasticSearch也是支持的。

  • 在创建索引,指定analyzer,ES在创建时会先检查是否设置了analyzer字段,如果没定义就用ES预设的

  • 在查询时,指定search_analyzer,ES查询时会先检查是否设置了search_analyzer字段,如果没有设置,还会去检查创建索引时是否指定了analyzer,还是没有还设置才会去使用ES预设的

ES分析器主要有两种情况会被使用:

  • 插入文档时,将text类型的字段做分词然后插入倒排索引,此时就可能用到analyzer指定的分词器
  • 在查询时,先对要查询的text类型的输入做分词,再去倒排索引搜索,此时就可能用到search_analyzer指定的分词器
//createIndex 默认为true,表示当Spring启动扫描到ElasticsearchRepository接口及其子接口时,如果配置的索引不存在,则Spring会创建索引
//useServerConfiguration = true表示当Spring创建索引时,Spring不会在创建的索引中设置以下设置:shards,replicas,refreshInterval和indexStoreType.这些设置将是Elasticsearch默认值(服务器配置).
@Document(indexName = "user", shards = 1, replicas = 0, createIndex = true)
public class User {
    
    
    @Id  //指定ES索引结构
    private Integer id;
    @Field(type = FieldType.Keyword)
    private String username;

    private Integer age;

    //指定某个字段分词器
    @Field(type = FieldType.Text, analyzer = "ik_smart", searchAnalyzer = "ik_max_word")
    private String desc;

    public User() {
    
    
    }

    public User(Integer id, String username) {
    
    
        this.id = id;
        this.username = username;
    }

    public User(Integer id, String username, Integer age, String desc) {
    
    
        this.id = id;
        this.username = username;
        this.age = age;
        this.desc = desc;
    }

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }


    public Integer getAge() {
    
    
        return age;
    }

    public void setAge(Integer age) {
    
    
        this.age = age;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }

    @Override
    public String toString() {
    
    
        return JSONObject.toJSONString(this);
    }
}

猜你喜欢

转载自blog.csdn.net/user2025/article/details/108691367