網頁搜尋客戶端
網站上一些使用者自己上傳的歌曲侵權了.
編輯給我一個Excel,包含歌曲名稱和歌手名稱.
比如
括號裡的內容需要去除之後再匹配.由於Excel的內容五花八門,我和編輯的工作量都很大,但是還存在漏殺的情況.
突然我想到藉助單位已有的solr,可以簡化工作量,而且匹配的精確度更高.
Excel的兩列直接貼在網頁上(其實就是列間用\t分隔,\n換行),然後程式解析,不斷訪問solr。
匹配到的歌曲,回資料庫獲取詳細資訊,以CSV形式提供下載.
編輯確認下線的歌曲,資料庫update一下,就完事兒了.
由於匹配度較好,編輯確認篩選的工作輕鬆了很多,而且漏殺率很小.
maven依賴:
核心Servlet
index.html網頁很簡單
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>版權查詢</title>
</head>
<body>
<form action="SearchServlet" method="POST">
<textarea id="data" name="data" cols=100 rows=30>小花狸版權搜尋.請輸入歌曲名稱和歌手名稱.</textarea>
<input type="submit" value="Upload" />
</form>
</body>
</html>
在網頁輸入excel的內容
CSV的結果:
編輯給我一個Excel,包含歌曲名稱和歌手名稱.
比如
最接近天堂的地方 | 張傑 |
最浪漫的事(改編版) | 張傑 |
最美的太陽 | 張傑 |
括號裡的內容需要去除之後再匹配.由於Excel的內容五花八門,我和編輯的工作量都很大,但是還存在漏殺的情況.
突然我想到藉助單位已有的solr,可以簡化工作量,而且匹配的精確度更高.
Excel的兩列直接貼在網頁上(其實就是列間用\t分隔,\n換行),然後程式解析,不斷訪問solr。
匹配到的歌曲,回資料庫獲取詳細資訊,以CSV形式提供下載.
編輯確認下線的歌曲,資料庫update一下,就完事兒了.
由於匹配度較好,編輯確認篩選的工作輕鬆了很多,而且漏殺率很小.
maven依賴:
-
<dependency>
-
<artifactId>solr-solrj</artifactId>
-
<groupId>org.apache.solr</groupId>
-
<version>4.9.0</version>
-
<type>jar</type>
-
<scope>compile</scope>
-
</dependency>
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-simple</artifactId>
-
<version>1.7.6</version>
-
</dependency>
-
<dependency>
-
<groupId>javax.servlet</groupId>
-
<artifactId>servlet-api</artifactId>
-
<version>2.5</version>
-
<scope>provided</scope>
-
</dependency>
-
<dependency>
-
<groupId>mysql</groupId>
-
<artifactId>mysql-connector-java</artifactId>
-
<version>5.1.38</version>
- </dependency>
核心Servlet
- package com.vv.tools;
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.solr.client.solrj.SolrServerException;
- import org.apache.solr.client.solrj.impl.HttpSolrServer;
- import org.apache.solr.client.solrj.response.QueryResponse;
- import org.apache.solr.common.SolrDocument;
- import org.apache.solr.common.SolrDocumentList;
- import org.apache.solr.common.params.ModifiableSolrParams;
- public class SearchServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- private static String URL = "jdbc:mysql://192.168.1.138:30000/songod";
- private static String USERNAME = "xx";
- private static String PWD = "xx";
- private HttpSolrServer server = null;
- private HttpSolrServer getSolrServer() {
- if (server == null) {
- String url = "http://192.168.1.204:8983/solr/Song";
- server = new HttpSolrServer(url);
- server.setSoTimeout(30000); // socket read timeout
- server.setConnectionTimeout(10000);
- server.setDefaultMaxConnectionsPerHost(10000);
- server.setMaxTotalConnections(10);
- server.setFollowRedirects(false); // defaults to false
- server.setAllowCompression(true);
- server.setMaxRetries(1);
- }
- return server;
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setCharacterEncoding("GBK");
- request.setCharacterEncoding("utf8");
- String str = request.getParameter("data");
- if (str != null && str != "") {
- try {
- List<Integer> result = searchAll(str);
- if (result.size() == 0) {
- response.sendRedirect("index.html");
- }
- response.setContentType("application/x-xls");
- response.setHeader("Content-Disposition", "attachment;filename=songs.csv");
- Class.forName("com.mysql.jdbc.Driver");
- Connection con = DriverManager.getConnection(URL, USERNAME, PWD);
- PreparedStatement pt = con.prepareStatement(
- "select songid,name,singername,vocalid,authflag from sod_song_ksc where songid = ?");
- for (Integer songid : result) {
- pt.setInt(1, songid);
- ResultSet rs = pt.executeQuery();
- while (rs.next()) {
- response.getWriter().print(rs.getString("songid") + ",");
- response.getWriter().print(rs.getString("name") + ",");
- response.getWriter().print(rs.getString("singername") + ",");
- response.getWriter().print(rs.getString("vocalid") + ",");
- response.getWriter().print(rs.getString("authflag") + "\n");
- }
- rs.close();
- }
- pt.close();
- con.close();
- response.getWriter().flush();
- } catch (SolrServerException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- private List<Integer> searchAll(String str) throws SolrServerException {
- List<Integer> result = new ArrayList<Integer>(100);
- String[] rows = str.split("\r\n");
- for (String row : rows) {
- String[] info = row.split("\t");
- String name = info[0].replaceAll("[\\[(<《【]", " ").replaceAll("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?《》]", "");
- String singername = "*";
- if (info.length > 1) {
- if (info[1].contains("/")) {
- String[] artists = info[1].split("/");
- for (String artist : artists) {
- singername = artist;
- result.addAll(search(name, singername));
- }
- } else {
- singername = info[1];
- result.addAll(search(name, singername));
- }
- } else {
- result.addAll(search(name, singername));
- }
- }
- return result;
- }
- private List<Integer> search(String wdSongname, String wdSingername) throws SolrServerException {
- List<Integer> list = new ArrayList<Integer>();
- ModifiableSolrParams params = new ModifiableSolrParams();
- params.set("q", "(+Song_Name:" + wdSongname + " +Song_SingerName:" + wdSingername + ") or (+Song_Name:"
- + wdSongname + " and +Song_Name:" + wdSingername + ")");
- params.set("start", 0);
- params.set("rows", 300000);
- params.set("wt", "json");
- QueryResponse qrsp = getSolrServer().query(params);
- SolrDocumentList docs = qrsp.getResults();
- Iterator it = docs.iterator();
- while (it.hasNext()) {
- SolrDocument doc = (SolrDocument) it.next();
- Integer songid = (Integer) doc.getFieldValue("Song_SongID");
- String name = (String) doc.getFieldValue("Song_Name");
- String singername = (String) doc.getFieldValue("Song_SingerName");
- String producer = (String) doc.getFieldValue("Song_Producer");
- list.add(songid);
- }
- return list;
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
index.html網頁很簡單
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>版權查詢</title>
</head>
<body>
<form action="SearchServlet" method="POST">
<textarea id="data" name="data" cols=100 rows=30>小花狸版權搜尋.請輸入歌曲名稱和歌手名稱.</textarea>
<input type="submit" value="Upload" />
</form>
</body>
</html>
在網頁輸入excel的內容
CSV的結果:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1993297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 仿UC客戶端的快速搜尋訊息通知效果客戶端
- 實時搜尋:如何用Javascript客戶端保證安全JavaScript客戶端
- 網頁SSH客戶端的實現網頁客戶端
- 搜尋外貿客戶軟體推薦
- 《ElasticSearch6.x實戰教程》之簡單搜尋、Java客戶端(上)ElasticsearchJava客戶端
- 《ElasticSearch6.x實戰教程》之複雜搜尋、Java客戶端(下)ElasticsearchJava客戶端
- 客戶端內嵌Vue頁面客戶端Vue
- 在網頁如何呼叫客戶端的可執行檔案網頁客戶端
- 網狐客戶端-win32客戶端Win32
- oracle取客戶端網路卡地址Oracle客戶端
- 終端搜尋工具
- easyui-table表格客戶端分頁例項UI客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- 國家網信辦釋出規定:付費搜尋應查驗客戶資質
- 客戶端爬取-答網友問客戶端
- 如何優化單頁面網站搜尋引擎?優化網站
- 淺談網頁搜尋排序中的投票模型網頁排序模型
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 泛企業搜尋PK網際網路搜尋
- 將經典頁面轉換成現代客戶端頁面客戶端
- [譯]如何在Service Worker和網頁客戶端之間傳送訊息網頁客戶端
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- 客戶端加解密客戶端解密
- Zookeeper 客戶端 API客戶端API
- java websocket 客戶端JavaWeb客戶端
- 客戶端筆記客戶端筆記
- Redis-客戶端Redis客戶端
- redis客戶端管理Redis客戶端
- CXF--客戶端客戶端
- 中斷客戶端客戶端
- github客戶端使用Github客戶端
- OpenSNS開源社交系統+基於ThinkPHP 5.3以上+PC端+客戶端+手機網頁版PHP客戶端網頁
- 搜尋結果頁優化優化
- ftp客戶端,ftp客戶端軟體具體怎麼使用?FTP客戶端
- 《samba搭建win客戶端和linux客戶端的區別》Samba客戶端Linux
- 網頁版“頭條搜尋”悄然上線,今日頭條想成為國內知名搜尋引擎網頁