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;
}