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串