#es配置
spring:
elasticsearch:
rest:
uris: 192.168.16.188:9200
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootTest.class)
public class JeecgTest {
@Test
// @SneakyThrows
public void name() {
HttpHost host = HttpHost.create("http://localhost:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
try {
client.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootTest.class)
public class JeecgTest {
private RestHighLevelClient client;
@Test
void testCreateIndex() throws IOException {
HttpHost host = HttpHost.create("http://localhost:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
CreateIndexRequest request = new CreateIndexRequest("books");
client.indices().create(request, RequestOptions.DEFAULT);
client.close();
}
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootTest.class)
public class JeecgTest {
@Test
public void testCreateIndex() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
HashMap<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("age", 20);
IndexRequest request = new IndexRequest("user");
String json = JSON.toJSONString(map);
request.source(json, XContentType.JSON);
IndexResponse index = client.index(request, RequestOptions.DEFAULT);
client.close();
}
}
@Test
public void testUpdateDoc() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
UpdateRequest updateRequest = new UpdateRequest("user", "88");
updateRequest.timeout("1s");
User user = new User();
user.setAge(222);
updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
client.close();
}
@Test
//批量添加文档
public void testCreateDocAll() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
List<Map> list = new ArrayList<>();
HashMap<String, Object> map = new HashMap<>();
for (int i = 0; i < 3; i++) {
map.put("aa" + i, i);
list.add(map);
}
BulkRequest bulk = new BulkRequest();
for (Map map1 : list) {
IndexRequest request = new IndexRequest("user");
String json = JSON.toJSONString(map1);
request.source(json, XContentType.JSON);
bulk.add(request);
}
client.bulk(bulk, RequestOptions.DEFAULT);
client.close();
}
@Test
//按id查询
public void getById() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
GetRequest request = new GetRequest("user", "88");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
String json = response.getSourceAsString();
System.out.println(json);
client.close();
}
@Test
//按id查询
public void getById2() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("_id",88));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
@Test
//按条件查询
public void getBySearch() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchPhraseQuery("name","张三"));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
@Test
//按条件高亮查询
public void getBySearch2() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchPhraseQuery("name","张三"));
HighlightBuilder highlightBuilder = new HighlightBuilder();
searchSourceBuilder.highlighter(highlightBuilder.field("name"));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
System.out.println(highlightFields);
}
client.close();
}
@Test
//全文高亮查询
public void getBySearch2() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.multiMatchQuery("张三"));
HighlightBuilder highlightBuilder = new HighlightBuilder();
searchSourceBuilder.highlighter(highlightBuilder.field("*"));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
System.out.println(highlightFields);
}
client.close();
}
@Test
//分页查询
public void getBySearch3() throws IOException {
// 开始查询的记录数
//页码
Integer pageNum=1;
//页数
Integer pageSize=2;
int start = (pageNum - 1) * pageSize;
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.from(start);
searchSourceBuilder.size(pageSize);
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String sourceAsString = hit.getSourceAsString();
System.out.println(sourceAsString);
}
client.close();
}
@Test
// MultiQuery 全部字段联合搜索
public void getBySearch4() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.multiMatchQuery("三"));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
@Test
// MultiQuery 多字段联合搜索
public void getBySearch5() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.multiMatchQuery("王","name","file"));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
@Test
// MultiQuery 多字段联合搜索和设置权重
public void getBySearch6() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.multiMatchQuery("广","name","address").field("name",10));
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
```erlang
GET user/_search
{
"query": {
"bool": { // 布尔查询
"must": [ // 查询条件 must 表示数组中的查询方式所规定的条件都必须满足
{
"multi_match": {
"query": "王小妹",
"minimum_should_match": "50%",
"fields": [
"name^10",
"title"
]
}
},
{
"match": {
"address": "广州"
}
}
]
}
}
}
@Test
// 布尔查询 BoolQuery
public void getBySearch7() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 搜索方式
// 首先构造多关键字查询条件
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("王小妹", "name", "title").field("name", 10);
// 然后构造匹配查询条件
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("address", "广州");
// 组合两个条件,组合方式为 must 全满足
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(multiMatchQueryBuilder);
boolQueryBuilder.must(matchQueryBuilder);
// 将查询条件封装给查询对象
searchSourceBuilder.query(boolQueryBuilder);
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
GET user/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "王小妹",
"minimum_should_match": "50%",
"fields": [
"name^10",
"title"
]
}
}
],
"filter": [
{
// 过滤条件:studymodel 必须是 201001
"match": {"address": "广州"}
},
{
// 过滤条件:年龄 >=10 <=100
"range": {"age": {"gte": 10,"lte": 100}}
}
]
}
}
}
@Test
// 过滤器
public void getBySearch8() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 搜索方式
// 首先构造多关键字查询条件
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("王小妹", "name", "title").field("name", 10);
// 构造匹配查询条件
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("address", "广州");
// 构造范围查询条件
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gt(10).lt(100);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(multiMatchQueryBuilder);
boolQueryBuilder.filter(matchQueryBuilder);
boolQueryBuilder.filter(rangeQueryBuilder);
// 将查询条件封装给查询对象
searchSourceBuilder.query(boolQueryBuilder);
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
注意:range和term一次只能对一个Field设置范围过虑
GET user/_search
{
"query": {
"bool": {
"filter": [
{
"range": {
"age": {
"gte": 10,
"lte": 100
}
}
}
]
}
},
"sort": [
{
"age": "desc"
}
]
}
@Test
// 排序
public void getBySearch9() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 构造范围查询条件
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gt(10).lt(100);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(rangeQueryBuilder);
searchSourceBuilder.sort("age", SortOrder.DESC);
// 将查询条件封装给查询对象
searchSourceBuilder.query(boolQueryBuilder);
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
String source = hit.getSourceAsString();
System.out.println(source);
}
client.close();
}
@Test
// 根据条件物理删除
public void deleteBySearch() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
DeleteByQueryRequest request = new DeleteByQueryRequest("efshdx"); // 替换成您的索引名称
MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("catagoryId", "1640927455451201537");
request.setQuery(matchPhraseQueryBuilder);
BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT); // 替换成您的Elasticsearch客户端实例
long deleted = response.getStatus().getDeleted();
System.out.println("删除掉的es数:"+deleted);
client.close();
}
@Test
// 使用es的Update Mapping API来更新日期映射,或者新建属性
public void updateDateMapping() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
PutMappingRequest request = new PutMappingRequest("person1"); // 替换成您的索引名称
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder();
mappingBuilder.startObject();
{
mappingBuilder.startObject("properties");
{
mappingBuilder.startObject("time1");
{
mappingBuilder.field("type", "date");
mappingBuilder.field("format", "yyyy/MM/dd"); // 更新日期格式
}
mappingBuilder.endObject();
mappingBuilder.startObject("time2");
{
mappingBuilder.field("type", "date");
mappingBuilder.field("format", "yyyy/MM/dd"); // 更新日期格式
}
mappingBuilder.endObject();
}
mappingBuilder.endObject();
}
mappingBuilder.endObject();
request.source(mappingBuilder);
AcknowledgedResponse response = client.indices().putMapping(request, RequestOptions.DEFAULT); // 替换成您的Elasticsearch客户端实例
client.close();
}
@Test
// 创建索引并添加属性
public void addIndexAndMapping() throws IOException {
HttpHost host = HttpHost.create("http://192.168.16.188:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
CreateIndexRequest request = new CreateIndexRequest("person1"); // 替换成您的索引名称
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder();
mappingBuilder.startObject();
{
mappingBuilder.startObject("properties");
{
// 添加字符串类型字段
mappingBuilder.startObject("string-field");
{
mappingBuilder.field("type", "text");
}
mappingBuilder.endObject();
// 添加整数类型字段
mappingBuilder.startObject("integer-field");
{
mappingBuilder.field("type", "integer");
}
mappingBuilder.endObject();
// 添加日期类型字段
mappingBuilder.startObject("date-field");
{
mappingBuilder.field("type", "date");
mappingBuilder.field("format", "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis");
}
mappingBuilder.endObject();
// 添加嵌套类型字段
mappingBuilder.startObject("nested-field");
{
mappingBuilder.field("type", "nested");
mappingBuilder.startObject("properties");
{
mappingBuilder.startObject("nested-string-field");
{
mappingBuilder.field("type", "text");
}
mappingBuilder.endObject();
}
mappingBuilder.endObject();
}
mappingBuilder.endObject();
}
mappingBuilder.endObject();
}
mappingBuilder.endObject();
request.mapping(mappingBuilder);
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); // 替换成您的Elasticsearch客户端实例
client.close();
}
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h
我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"