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

我的环境,

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

jdk 1.8.045    es 6.3.0(最新的)

建了一个@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;
}

    //下面是getter 和setter 和toString

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",
"关于如何来用 Elasticsearch,还是得看我的博客 https://waylau.com,妹"));  // 关键字"妹"
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这个语义;导致方法查询接口无效;

 百度后本人从最简单的入手测试如下:

    ①findByTitle(String title,Pageable pageable);        有效

    ② findByTitleContaining(String title,Pageable pageable)        无效

    ③findByTitleOrSummary(String title,String summary,Pageable pageable)     有效

    ④findDistinctByTileOrSummary(String title,String summary,Pageable pageable)    有效

    ⑤findDistinctByTileContainingOrSummaryContaining(String title,String summary,Pageable pageable)    无效

    虽然③④都有效但是,结果是一样的;④已经去重,但是③也去重了;不知道是不是最新版本不需要写Distinct

 ⑥findDistinctByTileContainingOrSummaryContainingOrContentContaining(String title,String summary,String content,Pageable pageable)    无效

    虽然 ⑥是无效的;但是把Containing去掉(就是上面代码接口中的方法)是有效的

所以:

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

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

     


猜你喜欢

转载自blog.csdn.net/x123453316/article/details/80780912
今日推荐