我正在使用Spring-Data-Elastic-Search进行搜索/缓存.我需要执行一个使用子(TermCache)和父(ConceptCache)属性的查询并返回子对象的实例(这意味着我不能使用嵌套对象).
我有以下结构:
@Document(indexName = "termweb" , type = "term")
public class TermCache {
@Id
private String id;
private String name;
private LanguageDTO language;
private String status;
private String definition;
@Field(type = FieldType.String, store = true)
@Parent(type = "concept")
private Long conceptId;
private String displayId;
private Map<Long, String> fields = new HashMap<>();
//todo think about storing it as a collection of nested objects
}
@Document( indexName = "termweb" , type = "concept")
public class ConceptCache implements ConceptDTO{
@Id
private String id; …Run Code Online (Sandbox Code Playgroud) With Spring-Data-Elasticsearch, I am trying to use analyzers and mappings defined in elasticsearch_config.json.
This JSON file is in /src/main/resources folder.
My JAVA model looks like:
@Document(indexName = "test", type="Tweet")
@Setting(settingPath = "/elasticsearch_config.json")
public class Tweet {
@Id
private String idStr;
/** other fields, getters and setters are omitted **/
}
Run Code Online (Sandbox Code Playgroud)
elasticsearch_config.json contains both settings and mappings:
{
"settings": { /* some filters */},
"mappings": { /* some types' mappings*/ }
}
Run Code Online (Sandbox Code Playgroud)
I tried with curl, I get no problem …
java spring elasticsearch spring-data spring-data-elasticsearch
我正在为项目使用spring-data-elasticsearch为其提供全文搜索功能.我们将真实数据保存在关系数据库和相关元数据中以及弹性搜索中的相应ID.因此,对于搜索结果,只需要id字段,因为将从关系数据库中检索实际数据.
我正在构建基于搜索条件的搜索查询,然后执行queryForIds():
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(indexName)
.withTypes(typeName)
.withQuery(getQueryBuilder(searchParams))
.withPageable(pageable)
.build();
return elasticsearchTemplate.queryForIds(searchQuery);
Run Code Online (Sandbox Code Playgroud)
如果我还需要特定searchQuery的总计数,我可以再做一次elasticsearchTemplate.count(searchQuery)调用,但是根据我的理解,这将是多余的.我认为有一种方法可以通过使用类似于elasticsearchTemplate.queryForPage()单个调用的方式来获取id和总计数列表.
另外,我可以使用queryForPage(SearchQuery query, Class<T> clazz, SearchResultMapper mapper)未注释的自定义类@Document吗?实际的文档类非常大,如果我不确定传递大类是否会导致引擎上的任何额外负载,因为有超过100个字段要进行json映射,但我需要的只是id字段..withFields("id")无论如何,我将在查询构建器中有一个.
我将 ElasticSearch-5.2.1 与 springboot 一起使用,并在 elasticsearch.bat 中出现以下错误
java.lang.IllegalStateException:从不支持的版本接收到消息:[2.0.0]最小兼容版本是:[5.0.0]
在我的应用程序控制台中出现以下错误:
引起原因:org.elasticsearch.client.transport.NoNodeAvailableException:配置的节点均不可用:[{#transport#-1}{127.0.0.1}{127.0.0.1:9300}]
当我在 google 中搜索时,它要求升级传输客户端,但是如何将传输客户端从 2.0 升级到 5.0
下面是我的配置代码:
@Value("${elasticsearch.port}")
private int EsPort;
@Value("${elasticsearch.clustername}")
private String EsClusterName;
Run Code Online (Sandbox Code Playgroud)
@Value("${elasticsearch.host}") 私有字符串 EsHost;
@Bean
public Client client() throws Exception {
Settings esSettings = Settings.settingsBuilder().put("cluster.name", EsClusterName).build();
return TransportClient.builder()
.settings(esSettings)
.build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(EsHost), EsPort));
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws Exception {
return new ElasticsearchTemplate(client());
}
Run Code Online (Sandbox Code Playgroud) 我们正在使用 spring-data-elasticsearch 项目与我们的 elasticsearch 集群进行交互,并且已经使用它大约一年了。最近,我们从 2.x 迁移到了 elasticsearch 5.x,现在我们有了“关键字”数据类型。
我想将这些关键字索引为小写值,我知道这可以使用字段标准化器来完成。我在文档或在线中找不到可以通过基于注释的映射将规范器添加到字段的任何地方。例如
@Field(type = FieldType.keyword, <some_other_param = some_normalizer>)
Run Code Online (Sandbox Code Playgroud)
这是可以做的事情吗?我知道我们也可以使用基于 JSON 的映射定义,所以如果需要的话我会回退到该选项,但如果可能的话希望能够这样做。
任何帮助将不胜感激!
我是第一次使用 spring-boot-elasticsearch。我现在已经弄清楚如何使用 elastics java api 描述我的串行差异管道查询。正如您将在下面看到的,此查询相当大,并为每个对象返回多个存储桶以及每个存储桶之间的序列差异。我在 Spring Data Repository 中看到的搜索示例似乎都在查询注释中拼出了查询的 json 主体,如下所示:
@Repository
public interface SonarMetricRepository extends ElasticsearchRepository<Article, String> {
@Query("{\"bool\": {\"must\": {\"match\": {\"authors.name\": \"?0\"}}, \"filter\": {\"term\": {\"tags\": \"?1\" }}}}")
Page<Article> findByAuthorsNameAndFilteredTagQuery(String name, String tag, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
这对于基本的 CRUD 操作来说似乎很优雅,但是如何将下面的查询放入存储库对象中,而无需使用 @Query 的原始查询语法?如果您有一个类似的示例,说明 Model 对象为串行差异查询结果或任何管道聚合构建的内容,那也会更有帮助。基本上我想要一个像这样在我的存储库中的搜索方法
Page<Serial Difference Result Object> getCodeCoverageMetrics(String projectKey, Date start, Date end, String interval, int lag);
Run Code Online (Sandbox Code Playgroud)
我应该提到我想使用这个对象的部分原因是我在这里也会有其他 CRUD 查询,而且我认为它会为我处理分页,所以这很有吸引力。
这是我的查询,它显示了 1 周时间段内声纳项目的代码覆盖率之间的序列差异:
SerialDiffPipelineAggregationBuilder serialDiffPipelineAggregationBuilder =
PipelineAggregatorBuilders
.diff("Percent_Change", "avg_coverage")
.lag(1);
AvgAggregationBuilder averageCoverageAggregationBuilder = AggregationBuilders
.avg("avg_coverage")
.field("coverage");
AggregationBuilder coverageHistoryAggregationBuilder …Run Code Online (Sandbox Code Playgroud) public enum Smoking {
NO("No"),YES("Yes");
}
Run Code Online (Sandbox Code Playgroud)
如何使用 spring-data-elasticsearch 存储 java 枚举,我想存储 Yes、No 并搜索相同的内容
我在我的elasticsearch存储库之一中有一个自定义@Query,因为自动生成方法没有使用匹配(而是使用query_string和analyze_wildcard),因此不适用于空格等。这个查询对我来说看起来很简单,所以我认为自己编写它不会有问题。
@Query("\"bool\": { " +
" \"filter\": [ " +
" { " +
" \"term\": { " +
" \"userId.keyword\": \"?0\" " +
" } " +
" }, " +
" {" +
" \"match\": { " +
" \"content\": \"?1\" " +
" }" +
" } " +
" ] " +
" }")
Page<SearchablePageHistory> findAllByUserIdAndContentLike(String userId, String content, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行该函数时,出现以下错误:
org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [type=x_content_parse_exception, reason=Failed to derive xcontent]
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:177) ~[elasticsearch-7.6.2.jar:7.6.2]
at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1793) ~[elasticsearch-rest-high-level-client-7.6.2.jar:7.6.2] …Run Code Online (Sandbox Code Playgroud) 我的 spring-boot(版本 2.4.1)应用程序已使用自动连接的 org.elasticsearch.client.RestHighLevelClient 成功连接到 ElasticSearch(v7.9.3)实例(我只需指定应用程序属性并且它可以工作)。
在项目的新阶段,添加了对 spring-boot-starter-webflux 的依赖,以使用一些反应式逻辑来调用外部 Web 服务。(这与我的elasticsearch连接无关)
但现在突然elasticsearch客户端也尝试使用reactor进行连接,我收到了如下错误:
reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.data.elasticsearch.client.NoReachableHostException:
Host 'https://elastic-dev.company.intra:9200:9200' not reachable. Cluster state is offline.
Caused by: org.springframework.data.elasticsearch.client.NoReachableHostException:
Host 'https://elastic-dev.company.intra:9200:9200' not reachable. Cluster state is offline.
at org.springframework.data.elasticsearch.client.reactive.SingleNodeHostProvider.lambda$lookupActiveHost$4(SingleNodeHostProvider.java:108) ~[spring-data-elasticsearch-4.1.2.jar!/:4.1.2]
Run Code Online (Sandbox Code Playgroud)
我知道 :9200:9200 存在配置问题,但我想禁用我的 Elasticsearch 客户端的reactor,以便它只使用旧的方式(我仍然需要我的 Elasticseach 客户端)。这可能吗 ?
谢谢。
elasticsearch spring-boot spring-data-elasticsearch spring-webflux
我有一个Spring Boot,Spring Data JPA(休眠)Web应用程序,想要引入文本搜索功能。
我了解以下内容
休眠搜索或spring-data- *都可以集成到我的应用中
休眠搜索可以与嵌入式Lucene或外部弹性搜索一起使用。
外部弹性搜索/ Solr有其自身的优势,但我可以接受
嵌入式也从这里开始。
我的问题
hibernate-search spring-data spring-data-jpa spring-data-solr spring-data-elasticsearch