十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
使用jdbc技術(shù)連接數(shù)據(jù)庫
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元朔城做網(wǎng)站,已為上家服務(wù),為朔城各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
使用語句對象statement的execute方法可以執(zhí)行對索引的操作
例如代碼如下
public class IndexFiles {
//使用方法:: IndexFiles [索引輸出目錄] [索引的文件列表] ...
public static void main(String[] args) throws Exception {
String indexPath = args[0];
IndexWriter writer;
//用指定的語言分析器構(gòu)造一個新的寫索引器(第3個參數(shù)表示是否為追加索引)
writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false);
for (int i=1; iargs.length; i++) {
System.out.println("Indexing file " + args[i]);
InputStream is = new FileInputStream(args[i]);
//構(gòu)造包含2個字段Field的Document對象
//一個是路徑path字段,不索引,只存儲
//一個是內(nèi)容body字段,進(jìn)行全文索引,并存儲
Document doc = new Document();
doc.add(Field.UnIndexed("path", args[i]));
doc.add(Field.Text("body", (Reader) new InputStreamReader(is)));
//將文檔寫入索引
writer.addDocument(doc);
is.close();
};
//關(guān)閉寫索引器
writer.close();
}
}
public class Search {
public static void main(String[] args) throws Exception {
String indexPath = args[0], queryString = args[1];
//指向索引目錄的搜索器
Searcher searcher = new IndexSearcher(indexPath);
//查詢解析器:使用和索引同樣的語言分析器
Query query = QueryParser.parse(queryString, "body",
new SimpleAnalyzer());
//搜索結(jié)果使用Hits存儲
Hits hits = searcher.search(query);
//通過hits可以訪問到相應(yīng)字段的數(shù)據(jù)和查詢的匹配度
for (int i=0; ihits.length(); i++) {
System.out.println(hits.doc(i).get("path") + "; Score: " +
hits.score(i));
};
}
}在整個檢索過程中,語言分析器,查詢分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根據(jù)需要進(jìn)行定制。
分 析:
索引過程中可以看到:
語言分析器提供了抽象的接口,因此語言分析(Analyser)是可以定制的,雖然lucene缺省提供了2個比較通用的分析器SimpleAnalyser和StandardAnalyser,這2個分析器缺省都不支持中文,所以要加入對中文語言的切分規(guī)則,需要修改這2個分析器。
Lucene并沒有規(guī)定數(shù)據(jù)源的格式,而只提供了一個通用的結(jié)構(gòu)(Document對象)來接受索引的輸入,因此輸入的數(shù)據(jù)源可以是:數(shù)據(jù)庫,WORD文檔,PDF文檔,HTML文檔……只要能夠設(shè)計相應(yīng)的解析轉(zhuǎn)換器將數(shù)據(jù)源構(gòu)造成成Docuement對象即可進(jìn)行索引。
對于大批量的數(shù)據(jù)索引,還可以通過調(diào)整IndexerWrite的文件合并頻率屬性(mergeFactor)來提高批量索引的效率。
總 結(jié):
搜索結(jié)果返回的是Hits對象,可以通過它再訪問Document==Field中的內(nèi)容。假設(shè)根據(jù)body字段進(jìn)行全文檢索,可以將查詢結(jié)果的path字段和相應(yīng)查詢的匹配度(score)打印出來,
java代碼內(nèi)創(chuàng)建mysql索引_如何利?Java代碼操作索引庫?今天是劉?愛?學(xué)Java的第161天。
感謝你的觀看,謝謝你。
學(xué)習(xí)計劃安排如下:學(xué)了?天的Elasticserch,但都是它本?的知識點,如何通過Java語?去操作它呢?
這就好?以前學(xué)數(shù)據(jù)庫,在數(shù)據(jù)庫?具中通過sql語句也能實現(xiàn)增刪改查,?在Java中就可以通過jdbc操作數(shù)據(jù)庫。
這?不學(xué)原?的Elasticsearch客戶端,?是直接學(xué)習(xí)spring提供的套件:SpringDataElasticsearch。
畢竟要知道,我們以前也基本沒?原?的jdbc,?是?的框架,使?起來也簡便。
?、創(chuàng)建Demo?程
關(guān)于SpringDataElasticsearch介紹:
學(xué)Java有?個繞不開的坎就是spring,就是主流的很多功能都會看到spring的影?。
我們已經(jīng)接觸過了的就有:SpringMVC、Spring、SpringBoot、SpringCloud。
今天繼續(xù)接觸Spring Data中的?個模塊。
為了更好地學(xué)習(xí),創(chuàng)建?個demo?程。
通過spring腳?架創(chuàng)建項?
①Spring Initializr
使?idea開發(fā)?具創(chuàng)建Java項?有多種?式,以前就是通過Maven??創(chuàng)建?個項?。
也可以通過Spring Initializr創(chuàng)建?個項?。
②說明項?名和Java版本號
項?名為es-demo,使?的jdk8.
③指定項?中需要?到的依賴
這?也就是springDataElasticsearch。
下圖也就是創(chuàng)建好后的項?結(jié)構(gòu):
該?式創(chuàng)建的好處在于:
我們不???導(dǎo)?依賴了,依賴是在創(chuàng)建項?時指定的,也就是創(chuàng)建項?中的步驟③
同時關(guān)于啟動類、配置?件都幫我們?學(xué)創(chuàng)建好了,其實?外乎就是上述三個核?關(guān)鍵步驟:啟動類、配置?件、pom?件。
該?式創(chuàng)建的壞處在于:
版本問題,項?中可能?的是?較舊的版本,spring創(chuàng)建的版本需要??修改。
根據(jù)??的需求選擇創(chuàng)建?式就好。
此外關(guān)于配置?件:
??配置的是properties?件,?我們常?的是yml?件,這?將其修改成yml?件。
在配置?件中指定elasticsearch中對應(yīng)的ip+端?,也就是我們前?天在虛擬機(jī)上安裝elasticsearch的ip和端?。
?、創(chuàng)建索引和映射
我們以前使?MySQL數(shù)據(jù)庫的時候,在Java中是實體類對應(yīng)了數(shù)據(jù)庫中的表數(shù)據(jù)。
同樣的道理,現(xiàn)在是索引庫了,在Java中也是使?實體類對應(yīng)對應(yīng)的索引庫。
注解@Document說明對應(yīng)的索引庫:indexName:索引庫名稱叫item。
type:索引庫類型docs。
shards:分?。
replicas:副本。
注解@Field說明索引庫字段:
類型有很多種,double屬于數(shù)字型,text和string屬于字符型,其中text表?分詞,string表?不分詞,上述中的keyword其實也就對應(yīng)著string。
注意images這個字段,index=false表?不需要索引,說明該字段不需要搜索功能。
我們以前學(xué)數(shù)據(jù)庫的時候,在Java中操作數(shù)據(jù)庫使?到了JdbcTemplate。
現(xiàn)在是要操作索引庫,同樣的道理,也有?個ElasticsearchTemplate
①createIndex()
創(chuàng)建索引庫,參數(shù)為實體類的Class對象。
②putMapping()
說明字段映射關(guān)系,參數(shù)同上。
三、實現(xiàn)增刪改查
通過JdbcTemplate實現(xiàn)數(shù)據(jù)庫的增刪改查,索引庫中?ElasticsearchTemplate。
但是我們不?這種?式?是?其它?式。
畢竟我們現(xiàn)在操作數(shù)據(jù)庫也沒?JdbcTemplate?是常常使?通?mapper。
該?法也就類似于通?mapper。
在通?mapper中我們是創(chuàng)建?個?定義接?繼承mapper接?。
再說明泛型之后,就可以直接使?這個接?完成增刪改查操作了。
同樣的道理,在這?是也是?定義?個接?繼承ElasticsearchRepository接?。
關(guān)于這個接?的繼承體系圖通過上圖也能查看到,名稱也都是見名知義的。
1新增索引
saveAll?法,看它的名字也就知道了其對應(yīng)的也就是新增操作。
其中關(guān)于新增,可以添加?條數(shù)據(jù),也可以添加多條數(shù)據(jù),例?中使?的是批量操作。
注意:在正式項?中應(yīng)該是從數(shù)據(jù)庫這種查詢到需要實現(xiàn)搜索功能的數(shù)據(jù),再將這些數(shù)據(jù)添加到索引庫中,從?實現(xiàn)搜索功能。
我這邊為了?便是??創(chuàng)建的偽數(shù)據(jù)。
2查詢索引
findAll也就是查詢所有的數(shù)據(jù),因為我們添加了多條數(shù)據(jù),所以查詢結(jié)果是?個集合。
增強(qiáng)for循環(huán)遍歷輸出,在控制臺上也就能查詢到新增的數(shù)據(jù)。
同樣的道理,還有deleteAll刪除索引,當(dāng)然這是都是最簡單最基礎(chǔ)的?種api,后續(xù)更多?法再說明。
最后
?有不得反求諸?,我是@劉?愛
?個?天上班晚上學(xué)習(xí)的95后滬漂,不為其它,只為學(xué)會?律做好??,也愿我的每?打卡能給你帶來勇?,歡迎點贊關(guān)注和評論。
¥
5.9
百度文庫VIP限時優(yōu)惠現(xiàn)在開通,立享6億+VIP內(nèi)容
立即獲取
java代碼內(nèi)創(chuàng)建mysql索引_如何利用Java代碼操作索引庫?
java代碼內(nèi)創(chuàng)建mysql索引_如何利?Java代碼操作索引庫?今天是劉?愛?學(xué)Java的第161天。
感謝你的觀看,謝謝你。
學(xué)習(xí)計劃安排如下:學(xué)了?天的Elasticserch,但都是它本?的知識點,如何通過Java語?去操作它呢?
這就好?以前學(xué)數(shù)據(jù)庫,在數(shù)據(jù)庫?具中通過sql語句也能實現(xiàn)增刪改查,?在Java中就可以通過jdbc操作數(shù)據(jù)庫。
這?不學(xué)原?的Elasticsearch客戶端,?是直接學(xué)習(xí)spring提供的套件:SpringDataElasticsearch。
畢竟要知道,我們以前也基本沒?原?的jdbc,?是?的框架,使?起來也簡便。
第 1 頁
?、創(chuàng)建Demo?程
關(guān)于SpringDataElasticsearch介紹:
學(xué)Java有?個繞不開的坎就是spring,就是主流的很多功能都會看到spring的影?。
1、將解壓包中的solr-4.7.1/dist/solr-4.7.1.war復(fù)制到tomcat_dir/webapps/目錄,并命名為solr.war。
2、將solr-4.7.1/example/lib/ext/目錄下的jar文件復(fù)制到tomcat/lib目錄下,將solr-4.7.1/example/resources/下的log4j.properties文件復(fù)制到tomcat_dir/lib目錄下;
切把 solr-4.7.1/example/solr,復(fù)制到tomcat_dir/bin下。
3、修改tomcat_dir/conf/server.xml
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" /
4、創(chuàng)建solr.xml,存放在路徑:tomcat/conf/Catalina/localhost/solr.xml,內(nèi)容:
Context path="/solr" docBase="C:\Tomcat 7.0\webapps\solr.war"
debug="0" crossContext="true"
Environment name="solr/home" type="java.lang.String" value="C:\Tomcat 7.0\bin\solr\" override="true" /
/Context
PS:上面的docBase和value路徑中不能存在中文字符,否則會出現(xiàn)404錯誤。
5、將C:\Tomcat 7.0\webapps下的solr.war包,啟動項目解壓;然后再添加幾個jar包:
solr-4.7.1\dist\solr-dataimporthandler-4.7.1.jar;
solr-4.7.1\dist\solr-dataimporthandler-extras-4.7.1.jar;
還要加載數(shù)據(jù)庫驅(qū)動包:mysql-connector-java-3.1.13-bin.jar
6、在C:\Tomcat 7.0\bin\solr\collection1\conf 下的solrconfig.xml增加以下數(shù)據(jù)庫配置:
requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"
lst name="defaults"
str name="config"data-config.xml/str
/lst
/requestHandler
7、將tomcat\bin\solr\collection1\conf下增加data-config.xml文件,內(nèi)容如下:
dataConfig
dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.221:3306/tmsdb"
user="root"
password="123456"/
document name="content"
entity name="node" query="select id,author,title,content from solrdb"
field column="id" name="id" /
field column="author" name="author" /
field column="title" name="title" /
field column="content" name="content" /
/entity
/document
/dataConfig
8、增加中文分詞器,ik-analyzer的配置如下:
①目前的中文分詞主要有兩種
1,基于中科院ICTCLAS的隱式馬爾科夫hhmm算法的中文分詞器,例如smartcn等。(不支持自定義擴(kuò)展詞庫)
2,基于正向迭代最細(xì)粒度切分算法(正向最大匹配并且最細(xì)分詞)例如IK,庖丁等(支持自定義擴(kuò)展詞庫)
安裝分詞前,可以去下載IK的分詞包 :
IK-Analyzer-4.7.1-0.0.1-SNAPSHOT.jar
下載完畢后,將此包放進(jìn)tomcat\solr的\WEB-INF\lib下面:tomcat\webapps\solr\WEB-INF\lib 。
下面需要在solr的schemal.xml進(jìn)行分詞器注冊:
!-- 配置IK分詞器 --
fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"
analyzer type="index"
!-- 分詞--
tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/
!-- 禁用詞過濾根據(jù)情況使用--
!-- filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/ --
/analyzer
analyzer type="query"
!-- 分詞--
tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/
!-- 禁用詞過濾根據(jù)情況使用--
!-- filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/--
/analyzer
/fieldType
最后還得配置一個引用字段就OK了
field name="ik" type="text_ik" indexed="true" stored="true" multiValued="true"/
②它的安裝部署十分簡單,將IKAnalyzer2012.jar部署亍項目的lib目錄中;IKAnalyzer.cfg.xml不stopword.dic文件放置在class根目錄(對于web項目,通常是WEB-I NF/classes目彔,同hibernate、log4j等配置文件相同)下即可 ;然后配置solr4.7中schema.xml配置解析器:
schema name="example" version="1.1"
……
fieldType name="text" class="solr.TextField"
analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/
/fieldType
……
/schema