java中使用elasticsearch进行简单的搜索

最近突然想写博客了,但是elasticsearch已经装好,我装在本地虚拟机上,这里就先不说elasticsearch的安装了,以后有机会再写一篇博客,这里仅仅使用es进行简单的搜索。
有一段时间没启动elasticsearch了,启动报错,显示没有文件权限,后来发现logs目录下有root用户的文件。
修改文件所有者:
在这里插入图片描述
这里我们直接修改logs文件夹的权限,这里要切换回root用户修改。
在这里插入图片描述
在这里插入图片描述
文件所有者就都变成es了。

接着我们重新启动es,注意elasticsearch的启动不能是root用户,这里我们使用自己创建的es用户启动。接着我们在本地访问,可以看到elasticsearch的初始化界面
在这里插入图片描述
如果在虚拟机上可以访问,但是本地不能访问,就看看虚拟机防火墙设置吧,把9200端口给放过,或者直接关闭防火墙。
这里我们是将9200端口放过。
vim /etc/sysconfig/iptables 可以修改防火墙
在这里插入图片描述

接着启动kibana(需要切换回root用户)

在这里插入图片描述

在本地访问5601端口,出现这个页面说明启动成功。
在这里插入图片描述

这里我之前已经将数据从mysql导入到elasticsearch中,这个网上教程都有,以后有机会再自己写一篇。
这里使用kibana视图界面查询spu_name 为小米,status=1的数据,这里使用的是ik中文分词器

GET shop-trade/doc/_search
{  
  "query": {  
    "bool": {   
      "must": [  
        { "match":{ "spu_name": "小米" } },  
        { "match": { "status": "1" } }  
        ]    
    }  
  }
}

结果如下
在这里插入图片描述
那么我们再java中如何进行搜索呢?
首先加上jar包

	<!--全局检索-->
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>6.2.2</version>
    </dependency>
    <!--操作全文检索的工具类-->
    <dependency>
        <groupId>io.searchbox</groupId>
        <artifactId>jest</artifactId>
        <version>5.3.3</version>
    </dependency>

这里我们使用jest工具来连接elasticsearch

@Bean
public JestHttpClient getEsClient(){
    JestClientFactory factory = new JestClientFactory();
    factory.setHttpClientConfig(new HttpClientConfig.Builder(
            "http://"+你es的地址)
            .multiThreaded(true)
            .readTimeout(5000)
            .build());

    return (JestHttpClient) factory.getObject();
}

注入这个bean就可以链接到elasticsearch

//将我们刚刚声明的bean注入进来,用于访问elasticsearch
@Autowired
private JestHttpClient esClient;

查询方法

//searchContent是要查询的内容
public void searchProduct(String searchContent) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//添加查询条件,QueryBuilders组合查询,这里我们可以和上面再kibana中查询语句对比一下
searchSourceBuilder.query(QueryBuilders.boolQuery()
        //匹配查询条件
        .must(QueryBuilders.matchQuery("spu_name",searchContent))
        .must(QueryBuilders.matchQuery("status",1)))
        //分页查询,从第0条,查询20条数据
        .from(0).size(20);
        
//建立查询
Search search = new Search.Builder(searchSourceBuilder.toString())
		//这里我们查询shop-trade索引(相当于数据库)
        .addIndex("shop-trade")
        .build();
        
//执行查询返回结果
SearchResult searchResult = esClient.execute(search);
//将数据转成json格式
String jsonString = searchResult.getJsonString();

System.out.println(jsonString);

进行请求之后我们看到控制台打出json串

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ROAOR1/article/details/88356225