ES查詢 Java JestClient API方法

需要依賴

<!--        搜索引擎工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest</artifactId>
            <version>5.3.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>4.5.1</version>
        </dependency>

 2.從mysql向索引導入數據

    @Test
    public void insertData() throws IOException {
        // 查詢mysql數據
        List<PmsSkuInfo> pmsSkuInfoList = new ArrayList<>();
        pmsSkuInfoList = skuService.getAllSku();
        // 轉化爲es的數據結構
        List<PmsSearchSkuInfo> pmsSearchSkuInfos = new ArrayList<>();
        for (PmsSkuInfo pmsSkuInfo : pmsSkuInfoList) {
            PmsSearchSkuInfo pmsSearchSkuInfo = new PmsSearchSkuInfo();
            //複製屬性
            BeanUtils.copyProperties(pmsSkuInfo, pmsSearchSkuInfo);
            pmsSearchSkuInfo.setId(Long.parseLong(pmsSkuInfo.getId()));
            pmsSearchSkuInfos.add(pmsSearchSkuInfo);
        }
        // 導入es
        for (PmsSearchSkuInfo pmsSearchSkuInfo : pmsSearchSkuInfos) {
            //插入
            Index put = new Index.Builder(pmsSearchSkuInfo).index("bookindex").type("PmsSkuInfo").id(pmsSearchSkuInfo
                    .getId() + "").build();
            jestClient.execute(put);
        }
    }

3.構建搜索對象

  其中bool 下面有   filter(包含rangequery ,termquery)  must(包含multiMatchQueryBuilder,termQueryBuilder,matchQuery)

  與bool同級的有分頁,高亮,排序

@SpringBootTest
@RunWith(SpringRunner.class)
public class BookSearchServiceApplicationTests {
    @Autowired
    JestClient jestClient;
    @Test
    public void contextLoads() throws IOException {

        //構建搜索對象
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //bool
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
            //filter
        TermQueryBuilder termQueryBuilder = new TermQueryBuilder("skuName","小米");
        boolQueryBuilder.filter(termQueryBuilder);

            //must
        MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("skuDesc","移動聯通電信4G手機");
        boolQueryBuilder.must(matchQueryBuilder);
        searchSourceBuilder.query(boolQueryBuilder);
        //分頁
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(20);
        //高亮
        searchSourceBuilder.highlight(null);
        String dslStr = searchSourceBuilder.toString();
        List<PmsSearchSkuInfo> pmsSearchSkuInfoList = new ArrayList<>();
        Search search = new Search.Builder(dslStr).addIndex("bookindex").addType("PmsSkuInfo").build();
        SearchResult result = jestClient.execute(search);
        List<SearchResult.Hit<PmsSearchSkuInfo, Void>> hits = result.getHits(PmsSearchSkuInfo.class);
        for (SearchResult.Hit<PmsSearchSkuInfo, Void> hit : hits) {
            PmsSearchSkuInfo source = hit.source;
            pmsSearchSkuInfoList.add(source);
        }
        System.out.println(pmsSearchSkuInfoList);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章