ElasticSearch 文章检索系统。输入关键字可检索文章标题和内容。

创建索引库和类型

PUT /articles
{
  "mappings": {
    "article":{
      "properties": {
        "id":{
          "type": "keyword"
        },
        "title":{
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "author":{
          "type": "keyword"
        },
        "content":{
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}
//查所有
GET articles/article/_search
{
  "query": {"match_all": {}}
}

创建TransportClient 交由工厂管理

@Configuration
public class TranClient {
    @Bean
    public TransportClient getTransportClient(){
        try {
            TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.94.244"),9300));
            return transportClient;
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return null;
        }

    }
}

es代码

//添加索引
public void save(Article article) {
        try {
            XContentBuilder xContentBuilder = XContentFactory.jsonBuilder();
            XContentBuilder xContentBuilder1 = xContentBuilder.startObject()
                    .field("id", article.getId())
                    .field("title", article.getTitle())
                    .field("author", article.getAuthor())
                    .field("content", article.getContent()).endObject();
            transportClient.prepareIndex("articles","article").setSource(xContentBuilder1).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

	//搜索
    public List<Map<String, Object>> select(String userIndex) {
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.requireFieldMatch(false).preTags("").postTags("").field("*");
        List<Map<String, Object>> list = new ArrayList<>();
        QueryStringQueryBuilder field = QueryBuilders.queryStringQuery(userIndex)
                .field("title")
                .field("author")
                .field("content")
                .analyzer("ik_max_word");
        SearchResponse searchResponse = transportClient.prepareSearch("articles")
                .setTypes("article")
                .setQuery(field)
                //高亮查询
                .highlighter(highlightBuilder)
                .get();
        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
//            Map sourceAsMap = hit.getSourceAsMap();
//            list.add(sourceAsMap);

//高亮查询书写语句
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();

            for (String key : highlightFields.keySet()) {
                sourceAsMap.put(key, highlightFields.get(key).getFragments()[0].toString());
            }
            list.add(sourceAsMap);
        }
        return list;
    }
	//删除索引
    public void del(){
    	//根据id删除单个
        //transportClient.prepareDelete("article","articles","id").get();
   //删除所有     transportClient.admin().indices().prepareDelete("articles").execute().actionGet();
    }

service代码

//添加
@Override
    public void save(Article article) {
        article.setId(UUID.randomUUID().toString());
        articleRepository.save(article);
        articleDao.insert(article);
    }

	//定时删除索引库,从数据库中查所有建立索引
    @Override
    public void saveAll() {
        //创建一个定时器
        Timer timer = new Timer();
        //schedule方法是执行时间定时任务的方法
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                articleRepository.del();
                List<Article> select = articleDao.select();
                for (Article article : select) {
                    articleRepository.save(article);
                }
            }
        },1000,60000*2);//延时时间   一个周期时间
    }

	//查
    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<Map<String, Object>> select(String userIndex) {
        List<Map<String, Object>> list = articleRepository.select(userIndex);
        return list;
    }

pom jar包

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty4-client</artifactId>
            <version>6.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.2.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.28</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.3</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>


    </dependencies>

你可能感兴趣的:(ElasticSearch,java)