elasticsearch 弹性搜索不区分大小写,elasticsearch,lucene,spring-data,elasticsearch,Lucene,Spring Data" /> elasticsearch 弹性搜索不区分大小写,elasticsearch,lucene,spring-data,elasticsearch,Lucene,Spring Data" />

elasticsearch 弹性搜索不区分大小写

elasticsearch 弹性搜索不区分大小写,elasticsearch,lucene,spring-data,elasticsearch,Lucene,Spring Data,我有以下基于注释的弹性搜索配置,我已将索引设置为不进行分析,因为我不希望这些字段被标记化: @Document(indexName = "abc", type = "efg") public class ResourceElasticSearch { @Id private String id; @Field(type = FieldType.String, index = FieldIndex.not_analyzed) private Stri

我有以下基于注释的弹性搜索配置,我已将索引设置为不进行分析,因为我不希望这些字段被标记化:

    @Document(indexName = "abc", type = "efg")
    public class ResourceElasticSearch {
    @Id
    private String id;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String name;
    @Field(type = FieldType.String, store = true)
    private List<String> tags = new ArrayList<>();
    @Field(type = FieldType.String)
    private String clientId;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String virtualPath;
    @Field(type = FieldType.Date)
    private Date lastModifiedTime;
    @Field(type = FieldType.Date)
    private Date lastQueryTime;
    @Field(type = FieldType.String)
    private String modificationId;
    @Field(type = FieldType.String)
    private String realPath;
    @Field(type = FieldType.String)
    private String extension;
    @Field(type = FieldType.String)
    private ResourceType type;

我根据Andrei Stefan的建议发现了一些与使用注释类似的结果:

    @Bean
    public Client client() throws IOException {
    TransportClient client = new TransportClient();
    TransportAddress address = new InetSocketTransportAddress(env.getProperty("elasticsearch.host"), Integer.parseInt(env.getProperty("elasticsearch.port")));
    client.addTransportAddress(address);

    XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
            .startObject()
            .startObject("analysis")
            .startObject("analyzer")
            .startObject("keyword")
            .field("tokenizer", "keyword")
            .array("filter", "lowercase")
            .endObject()
            .endObject()
            .endObject()
            .endObject();
    if (!client.admin().indices().prepareExists("abc").execute().actionGet().isExists()) {
        client.admin().indices().prepareCreate("abc").setSettings(settingsBuilder).get();
    }
       return client;
    }

不可能实现您想要做的事情,也不是关于Spring数据配置,而是关于Elasticsearch本身:您将数据索引为
而不是
,并且它将保持这种方式


另外,如果您想要不区分大小写的数据,我建议将索引与。

结合使用,您可以在
@Document
之后添加
@Setting
,这会占用文件路径,设置文件应包含如下json:
{“分析”:{“分析器”:{“不区分大小写”:{“类型”:“自定义”、“标记器”:“空白”、“字符过滤器”:[“html_条”],“过滤器”:[“小写”、“ascifolding”]}}

使用analyzer
@field(type=FieldType.Keyword,analyzer=“不区分大小写”)

进行字段注释实际上是不可能的。不是关于Spring数据配置,而是关于Elasticsearch本身。您将数据索引为未分析的数据,并且它将保持这种状态。另外,如果您需要不区分大小写的数据,为什么不使用
关键字
分析器和
小写
标记过滤器进行索引?谢谢您的回复,我想这正是我需要的。Andrei能否请您将您的回复作为答案发布,以便我可以接受?
    @Bean
    public Client client() throws IOException {
    TransportClient client = new TransportClient();
    TransportAddress address = new InetSocketTransportAddress(env.getProperty("elasticsearch.host"), Integer.parseInt(env.getProperty("elasticsearch.port")));
    client.addTransportAddress(address);

    XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
            .startObject()
            .startObject("analysis")
            .startObject("analyzer")
            .startObject("keyword")
            .field("tokenizer", "keyword")
            .array("filter", "lowercase")
            .endObject()
            .endObject()
            .endObject()
            .endObject();
    if (!client.admin().indices().prepareExists("abc").execute().actionGet().isExists()) {
        client.admin().indices().prepareCreate("abc").setSettings(settingsBuilder).get();
    }
       return client;
    }