package org.weiboad.ragnar.server.controller.web; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; import org.apache.lucene.search.Query; import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.weiboad.ragnar.server.controller.ragnarlog.PutMetalog; import org.weiboad.ragnar.server.data.ResponseJson; import org.weiboad.ragnar.server.search.IndexService; import org.weiboad.ragnar.server.util.DateTimeHelper; import java.util.HashMap; import java.util.Map; @Controller public class Search { @Autowired IndexService indexHelper; //logger defined Logger log = LoggerFactory.getLogger(PutMetalog.class); @RequestMapping(value = "/search", method = RequestMethod.GET) public String searchPage( Model model, @RequestParam(value = "keyword", required = false) String keyword) { String[] fieldList = {"uid", "rpcid", "traceid", "rt_type", "url", "param", "ip", "httpcod", "project"}; Map<String, Float> boosts = new HashMap<>(); boosts.put("uid", 1.0f); boosts.put("ip", 1.0f); boosts.put("rpcid", 1.0f); boosts.put("traceid", 1.0f); boosts.put("rt_type", 1.0f); boosts.put("url", 1.0f); boosts.put("urlraw", 1.0f); boosts.put("param", 1.0f); boosts.put("httpcode", 1.0f); boosts.put("project", 1.0f); MultiFieldQueryParser mulFieldQueryParser = new MultiFieldQueryParser(fieldList, new StandardAnalyzer(), boosts); Query query; try { query = mulFieldQueryParser.parse(keyword); } catch (Exception e) { model.addAttribute("msg", "query parser error"); return "search"; } Sort sort = new Sort(new SortField("time", SortField.Type.DOUBLE, true)); ResponseJson result = indexHelper.searchByQuery(DateTimeHelper.getCurrentTime(), query, 0, 1000, sort); model.addAttribute("resultlist", result.getResult()); model.addAttribute("keyword", keyword); return "search"; } }