Elastic search 出现两个错误;小小总结

匿名 (未验证) 提交于 2019-12-03 00:33:02

我的环境,

用spring boot整合Elastic search (下面简称es)

建了一个@document的文档类,还有一个集成ElasticSerchRepository仓库接口;

代码:

0.application.properties

spring.data.elasticsearch.cluster-nodes=localhost:9300

1.文档类

@Document(indexName = "blog",type="blog")
public class EsBlog implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private String id;
private String title;
private String sumarry;
private String content;
protected EsBlog() {

}

public EsBlog(String id, String title, String sumarry, String content) {
this.id = id;
this.title = title;
this.sumarry = sumarry;
this.content = content;
}


2.仓库类

public interface EsBlogRepository extends ElasticsearchRepository<EsBlog, String>{
/**
* 分页查询博客(去重)
* @param title
* @param sumarry
* @param content
* @return
*/

Page<EsBlog> findByTitleOrSumarryOrContent(String title,String summary,String content,Pageable pageable);

3.测试类

@RunWith(value = SpringRunner.class)
@SpringBootTest
public class TestEsBlogRepository {
/**
* 分页查询博客(去重)
* @param title
* @param sumarry
* @param content
* @return
*/
@Autowired
EsBlogRepository esBlogRepository;
@Before
public void initRepository() {
System.out.println("=====================================");
esBlogRepository.deleteAll();
esBlogRepository.save(new EsBlog("1","老卫跟你谈谈安装 Elasticsearch","老卫elasticsearch",
"关于如何来安装 Elasticsearch,这个请看我的博客 https://waylau.com"));
esBlogRepository.save(new EsBlog("2","老卫跟你谈谈 Elasticsearch 的几个用法","老卫elasticsearch",

esBlogRepository.save(new EsBlog("3","老卫和你一起学 Elasticsearch","elasticsearch",
"如何来学习 Elasticsearch,最终看我的博客 https://waylau.com,酒")); // 关键字"酒"
}
@Test
public void testFindDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining() {
try {
Pageable pageable = new PageRequest(0, 20);
String title = "老卫";
String sumarry = "老卫";
String content = "如果";
Page<EsBlog> page = esBlogRepository.findByTitleOrSumarryOrContent(title,sumarry,content,pageable);
System.out.println(page.getTotalElements());
assertThat(page.getTotalElements()).isEqualTo(6);
} catch (Exception e) {
e.printStackTrace();
}

}

错误两个

第一个:

NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{NJnXzVnyRoGUI4N8wK6cUg}{localhost}{127.0.0.1:9300}]]

翻译一下就是一个配置节点都没有定义;什么是节点,就是一个es服务都没启动(一个节点对应一个ElasticSearch6.3.0或者一个es集群);启动es解决(ps:启动就是在根目录bin中的elasticsearch.bat)

第二个:

在仓库接口中起方法名的时候:

看17年的一个视频上写:

Page<EsBlog> findDistinctByTitleContainingOrSumarryContainingOrContentContaining(String title,String summary,String content,Pageable pageable);

这样是错误的,es不翻译Containing这个语义;导致方法查询接口无效;




(String title,String summary,Pageable pageable)

findDistinctByTileContainingOrSummaryContaining


findDistinctByTileContainingOrSummaryContainingOrContentContaining


所以:

虽然不知道es之前版本怎样,但是在ElasticSearch6.3.0中自定义仓库接口方法时,结论两个:一、如果方法名有Containing直接检索无效;二、方法名加入Distinct有效,但是不加一样可以去重(方法本身自带去重效果)

我是第一次接触es,不对的地方,希望大家留言指正,共同学习;



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!