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串

经验分享 程序员 微信小程序 职场和发展