ElasticSearch全文搜索引擎JAVA入门

1.认识ElasticSearch    

        Elasticsearch 是一个分布式的、开源的搜索分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化。Elasticsearch 是基于 Apache Lucene 的。Elasticsearch 因其简单的 REST API、分布式特性、告诉、可扩展而闻名。Elasticsearch 是 Elastic 产品栈的核心,Elastic 产品栈是个开源工具集合,用于数据接收、存储、分析、可视化。

看不懂是吧

本人理解就是:我们输入的是模糊的字句,想在数据量庞大的库中查询查询,使用MySql的模糊查询like,是不太能实现的,所以ElasticSearch就是对like模糊查询的升级,它可以将我们输入的字句进行自动分词,转换为有一定结构的数据.

 2.ElasticSearch的优势

       2.1 那肯定是查询效率高 !  查询效率高 !  查询效率高 ! 

       2.2  关键字可以实现高亮

为什么查询效率高呢?

        1.e s 采用的是倒排索引 如图:

        

我们有①三段语句,分词器将语句中的所有词汇分割出来并记录上索引②, ③是将词汇转为全小写,④

是将词汇根据首字母顺序进行排序 ,⑤再将同样的词汇进行汇总并对应的语句

 我们如果需要查询 ' java' ,就不会像MySql的like一样每个语句去逐字查询,es就可以直接根据java词汇所对应的语句索引查询, 这速度简直快的不是一星半点

3.常见的全文搜索
  • 全文搜索工具包-Lucene(核心)

  • 全文搜索服务器 ,Elastic Search(ES) / Solr等封装了lucene并扩展

4.springboot使用es代码   

        1.导入依赖
<dependencies>
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
	</dependency>
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	     <artifactId>spring-boot-starter-test</artifactId>
	 </dependency>
	  <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
</dependencies>

         2.写入工具类 --可以直接拿去用,注意IP和端口就行

public class ESClientUtil {

    public static TransportClient getClient(){
        TransportClient client = null;
        Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
        try {
            client = new PreBuiltTransportClient(settings).addTransportAddress(
            new TransportAddress(InetAddress.getByName("127.0.0.1"), 9200));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return client;
    }

}

        3.配置yml

spring:
  elasticsearch:
    rest:
      uris:
        - http://localhost:9200

        4.domain对象


//indexName 索引库
//type 类型
//data 小辣椒
@Document(indexName = "orders",type = "_doc")//标记该对象是ES的文档对象
@Data
public class OrderDoc {

    //标记为文档ID,该ID的值会作为document的id值
    @Id
    private Long id;
    /**
     * 需要分词的话需要指定,为text即使用分词 这里使用的是IK分词器
     * 一般需要作为关键字搜索的字段都要指定为text,因为需要分词且创建索引
     *   type 指定的类型
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    //@Field(type = FieldType.Keyword)
    private String name;

   
    @Field(type = FieldType.Integer)
    private int year;
    

    @Field(type = FieldType.Double)
    private BigDecimal salary;

}

5.创建Repository

/**
 *ElasticsearchRepository 来操作ES,该接口中包含了针对ES的CRUD方法
 * 注意泛型选择是那个domain对象有以及id类型
 * /  
@Repository
public interface OrderRepository extends ElasticsearchRepository<OrderDoc,Long> {
}

6.springboot测试 --注意修改方法就是添加,添加的时候如果id存在就执行修改

        

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SearchStart.class)
public class OrderESTest {
	//操作ES的template模板
    @Autowired
    private ElasticsearchRestTemplate template;
    
    @Autowired
    private OrderRepository orderRepository;

    @Test
    public void test(){
   		//创建索引
        Boolean bool1 = template.createIndex(CourseDoc.class);
         System.out.println(bool);
        //创建映射
       Boolean boo2 = template.putMapping(CourseDoc.class);
         System.out.println(boo2);
        //添加
        orderRepository.save(new OrderDoc(1L,"tom",2,new BigDecimal("2000")));
        //根据id查询
          Optional<OrderDoc> optional = orderRepository.findById(1l);
        //根据id删除
          orderRepository.deleteById(1L);
    }
}

        

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要在Java中使用Elasticsearch进行全文搜索,你需要使用ElasticsearchJava客户端库。以下是一个简单的例子来演示如何使用Java进行全文搜索: 首先,确保你已经在你的项目中添加了ElasticsearchJava客户端库的依赖。你可以在Maven或Gradle配置文件中添加以下依赖: Maven: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.15.0</version> </dependency> ``` Gradle: ```groovy implementation 'org.elasticsearch.client:elasticsearch-rest-client:7.15.0' ``` 接下来,创建一个Elasticsearch客户端实例并连接到Elasticsearch集群。你可以使用以下代码来实现: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); ``` 在这个例子中,我们使用localhost和默认的Elasticsearch端口9200来连接到本地的Elasticsearch集群。 然后,你可以使用客户端执行全文搜索。以下是一个简单的例子: ```java SearchRequest searchRequest = new SearchRequest("your_index_name"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("your_field_name", "your_search_query")); searchRequest.source(searchSourceBuilder); try { SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits.getHits()) { // 处理搜索结果 String sourceAsString = hit.getSourceAsString(); // ... } } catch (IOException e) { e.printStackTrace(); } ``` 在这个例子中,我们创建了一个SearchRequest对象,指定了要搜索的索引名称。然后,我们使用SearchSourceBuilder构建了一个查询,使用matchQuery方法指定要搜索的字段和搜索查询。最后,我们使用客户端的search方法执行搜索,并处理搜索结果。 请注意,这只是一个简单的示例,你可以根据你的需求进行更复杂的查询和处理。 希望这个例子能帮到你!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值