我正在使用带有Spring启动的嵌入式elasticsearch,并且我试图使用注释来配置设置和映射。我遵循了本教程,其中解释了如何实现对多个字段的搜索。无论如何,我已经在我的文档实体中定义了settings.json和mappings.json,如下所述,但它似乎没有读取文件,因为卷曲映射不会返回文件中定义的相应配置。
索引由spring批处理执行。它从数据库读取数据并将其写入elasticsearch。这非常有效。
当我向http://localhost:9200/profile/_search发出POST请求时,我没有得到任何结果(应该返回7个项目):
{
"size": 10,
"query": {
"match": {
"_all": {
"query": "user male",
"operator": "and"
}
}
}
}
如果我将查询更改为“user5”,它将返回具有此昵称的用户。
如果有人能给我一个提示,我将不胜感激。配置有什么问题?
配置
@Configuration
@EnableElasticsearchRepositories(basePackages ="com.company.searchengine.repository")
public class ElasticSearchConfiguration {
@Value("${elasticsearch.clustername}")
private String esClusterName;
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws IOException {
return new ElasticsearchTemplate(nodeBuilder().local(true).clusterName
(esClusterName).node()
.client());
}
}
文档
@EqualsAndHashCode(of = "uuid")
@ToString(exclude = "uuid")
@NoArgsConstructor(onConstructor = @__({@JsonCreator}))
@Getter
@Setter
@Document(indexName = "profiles", type = "profile", createIndex = false)
@Setting(settingPath = "/settings/settings.json")
@Mapping(mappingPath = "/mappings/mappings.json")
public class IndexedProfile {
@Id
@NonNull
private String uuid;
@NonNull
//@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String nickname;
@NonNull
//@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String gender;
//@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String about;
private GeoPoint location;
@Field(type = FieldType.Date, format = DateFormat.year_month_day)
private Date birthdate;
}
批量作业
@Override
public void write(List<? extends IndexedProfile> items) throws Exception {
List<IndexQuery> indexQueries = items.stream()
.map(item -> new IndexQueryBuilder().withObject(item).withId(String.valueOf(item.getUuid())))
.map(builder -> builder.withType(DOCUMENT_TYPE))
.map(builder -> builder.withIndexName(INDEX_NAME + runId))
.map(IndexQueryBuilder::build)
.collect(Collectors.toList());
this.elasticsearchTemplate.bulkIndex(indexQueries);
}
设置
{
"settings": {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
}
映射
{
"mappings": {
"profile": {
"_all": {
"index_analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
},
"nickname": {
"type": "string",
"index": "not_analyzed"
},
....
}
}
studentdoc_setting_index_mapping_type_overlayadjacency.json
{
"index": {
"mapping": {
"total_fields": {
"limit": "100000"
}
}
}
}
@Setting(settingPath = "studentdoc_setting_index_mapping_type_overlayadjacency.json")
public class StudentDoc {
}
设置和映射JSON结构不正确,请尝试使用以下参考示例进行调整:
映射:https://github.com/spring-projects/spring-data-elasticsearch/tree/master/src/test/resources/mappings
设置:https://github.com/spring-projects/spring-data-elasticsearch/tree/master/src/test/resources/settings
根据org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearch chPeristentEntity
,设置createIndex=false
将导致框架不创建索引和映射!所以您应该删除该设置或将其设置为true。
问题内容: 我正在尝试为各个字段使用不同的分析器设置ElasticSearch索引。但是,我似乎找不到一种设置特定于字段的分析器的方法。这是我创建(测试)索引的方法: 如果我正确阅读了文档,则应创建类型为“ tweet”的索引“ twitter”,并且应通过雪球词根分析器分析“ message”字段的内容。为了对此进行测试,我尝试了以下查询: 如果我没记错的话,那应该会受到打击,因为战斗是战斗的源
问题内容: 我在pom.xml中有一个带有Spring Data Elasticsearch插件的Spring Boot应用程序。我创建了一个我想索引的文档类: 我还为此类创建了一个存储库: 我进行了一个测试,使用存储库对三个示例对象建立了索引。它很长,所以我只发布它。事实是,在ES服务器中创建的映射会忽略@Field批注设置的配置: 没有有关分析器的信息,“ someTransientData”
我最近从使用Spring的XML配置切换到Java配置,遇到了一个奇怪的问题。 XML配置为: 有什么想法吗?
问题内容: 我正在将ES 0.20.6与elasticsearch -river- jdbc插件一起使用 。我使用以下方法创建了一条河: 现在,我要添加的类型映射为插件文档中定义的选项。但我真的无法弄清楚语法,总是会收到以下错误(部分内容因我的尝试而异) 问题答案: 我认为您提交的东西甚至都不是正确的json对象。我可以想象到type_mapping对象必须包含映射,与使用put映射api或创建索
我试图创建一个简单的spring mvc应用程序进行实践,但我不断地得到这样的错误: 在名为'MVC-Dispatcher'的DispatcherServlet中没有找到带有URI的HTTP请求映射,我从Tomcat得到了404错误。 这是我的控制器 当在dispatcher servlet中使用bean时,我可以让控制器工作,但出于某种原因,我无法获得带有注释的正确处理程序映射。我是不是猜我的m
我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?