網頁搜尋客戶端
網站上一些使用者自己上傳的歌曲侵權了.
編輯給我一個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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 搜尋引擎ElasticSearch18_ElasticSearch的客戶端操作2Elasticsearch客戶端
- 網頁SSH客戶端的實現網頁客戶端
- 搜尋外貿客戶軟體推薦
- 《ElasticSearch6.x實戰教程》之複雜搜尋、Java客戶端(下)ElasticsearchJava客戶端
- 《ElasticSearch6.x實戰教程》之簡單搜尋、Java客戶端(上)ElasticsearchJava客戶端
- 客戶端內嵌Vue頁面客戶端Vue
- 網狐客戶端-win32客戶端Win32
- 客戶端爬取-答網友問客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- [譯]如何在Service Worker和網頁客戶端之間傳送訊息網頁客戶端
- 將經典頁面轉換成現代客戶端頁面客戶端
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 網頁版“頭條搜尋”悄然上線,今日頭條想成為國內知名搜尋引擎網頁
- OpenSNS開源社交系統+基於ThinkPHP 5.3以上+PC端+客戶端+手機網頁版PHP客戶端網頁
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java
- 網路開發基礎客戶端001客戶端
- java websocket 客戶端JavaWeb客戶端
- redis客戶端管理Redis客戶端
- iscsi linux客戶端Linux客戶端
- Zookeeper 客戶端 API客戶端API
- 客戶端加解密客戶端解密
- Tower:GIt客戶端Git客戶端
- YouTube macYouTube客戶端Mac客戶端
- Redis-客戶端Redis客戶端
- 客戶端筆記客戶端筆記
- SAP UI 搜尋分頁技術UI
- ftp客戶端,ftp客戶端軟體具體怎麼使用?FTP客戶端
- bilibili mac客戶端 嗶哩嗶哩 b站mac客戶端Mac客戶端
- 偶然發現迅雷客戶端內嵌的網頁是基於 ThinkPHP5 的、、客戶端網頁PHP
- IBM將向商務客戶提供ApplePay網頁版IBMAPP網頁
- 完整仿寫鴻洋WanAndroid網站客戶端NaNAndroid網站客戶端
- Qt實現網路聊天室(客戶端,服務端)QT客戶端服務端
- VNC客戶端推薦,Windows系統下VNC客戶端推薦VNC客戶端Windows
- VNC客戶端是Windows,VNC客戶端是Windows如何進行操作VNC客戶端Windows