日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

solr java浏览器访问_solr解决访问安全

發(fā)布時(shí)間:2025/3/11 HTML 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 solr java浏览器访问_solr解决访问安全 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Tomcat7,solr3.6,mmseg1.8

1:環(huán)境的搭建

1:解壓tomcat,solr,mmseg4j

2:復(fù)制dist文件夾下apache-solr.war到tomcat的webapp文件夾下,修改文件名為solr(不該也行,這里修改文件名方便一會(huì)地址欄的輸入)

3:創(chuàng)建solr-tomcat文件夾作為solr的根目錄

4:tomcat/conf/Catalina/localhost文件夾(不存在手動(dòng)創(chuàng)建)下創(chuàng)建solr.xml,文件內(nèi)容如下,根據(jù)情況,修改相應(yīng)的路徑

5:復(fù)制solr解壓后,example文件夾下的solr文件夾到solr-tomcat文件夾下

6:訪問(wèn)http://localhost:8080/solr/,驗(yàn)證是否配置成功(訪問(wèn)后,solr-tomcat/solr文件夾下會(huì)多一個(gè)data文件夾)

2:配置文件的說(shuō)明

1:apache-tomcat-7.0.19\conf\Catalina\localhost\solr.xml文件,用來(lái)配置solr的根目錄,目前只用到一次

2:E:\solr-tomcat\solr\solr.xml文件,目前只看到在配置多核時(shí)用到,后面講

3:E:\solr-tomcat\solr\conf\schema.xml文件(非常重要)

配置域的類(lèi)型

配置域,在doc文檔中的用到的field和solrj中用到的域名必須在這里配置。Index表示是否需要索引,stored是否需要存儲(chǔ),multiValued表示是否有多個(gè)值

就是動(dòng)態(tài)匹配

在搜索時(shí)可以直接通過(guò)“zhang san”來(lái)搜索那么,不需要在通過(guò)“name:zhang san”來(lái)搜索

4:E:\solr-tomcat\solr\conf\solrconfig.xml文件:緩存,請(qǐng)求的配置,索引的配置

3:瀏覽器客戶端的說(shuō)明

Solr->analyze:分詞

Query String:根據(jù)索引搜索時(shí)用。eg:name:zhang san可以通過(guò)name來(lái)搜索姓名是zhang san的人。如果配置了copyField也可以直接通過(guò)zhang san來(lái)搜索

4:中文分詞的配置

1:解壓mmseg4j,拷貝mmseg4j-all-1.8.5.jar到tomcat\webapp\solr的lib目錄下

2:solr-tomcat\solr下創(chuàng)建dic文件夾,存放詞庫(kù);拷貝mmseg4j下的words.dic到該目錄下

3:修改schema.xml文件,添加如下代碼(注意修改路徑)

4:測(cè)試中文分詞是否起作用

復(fù)制一段中文到Field value中;Field選擇name輸入complex,測(cè)試分詞

name在使用name(沒(méi)有配置中文分詞,使用默認(rèn)的)再次進(jìn)行測(cè)試

5:多核的配置

1:拷貝example\multicore文件夾下的core0,core1,solr.xml到solr-tomcat\solr文件夾下

2:方位http://localhost:8080/solr/

使用瀏覽器客戶端創(chuàng)建索引,搜索

4:創(chuàng)建索引(xml,json,cvs格式的文件cookbook)

1:復(fù)制solr解壓后的,example文件夾下的exampledocs目錄到solr-tomcat下(里面包含了一些測(cè)試索引用到的文件)

2:命令行創(chuàng)建索引:E:\solr-tomcat\exampledocs>java -Durl=http://localhost:8080/solr/update -Dcommit=yes -jar post.jar m*.xml,對(duì)該文件夾下所有以m開(kāi)頭的xml文件創(chuàng)建索引,此時(shí)solr-tomcat\solr\data文件夾下多了一些文件,有段文件,域文件,索引文件等

3:通過(guò)瀏覽器進(jìn)行搜索,必須通過(guò)一個(gè)完整的分詞(一個(gè)完整的單詞,不能用a,m,z等搜索,同時(shí)this,that等也不能用于搜索)

5:更新索引

更新索引一般都是通過(guò)刪除索引,然后再創(chuàng)建

6:刪除索引

Solrj的使用

private?static?final?String?DEFAULT_URL?=?"http://localhost:8080/solr/";

1:創(chuàng)建索引(如何對(duì)一個(gè)指定格式的xml創(chuàng)建索引還不清楚)

對(duì)文件進(jìn)行索引

public?void?index()?throws?SolrServerException, IOException {

SolrServer solrServer =?new?HttpSolrServer(DEFAULT_URL);

SolrInputDocument document =?new?SolrInputDocument();

document.addField("id",?"1");?//id必須有

document.addField("name",?"test");

document.addField("path",?"測(cè)試");?//path需要在schema.xml中定義

solrServer.add(document);

solrServer.commit();

}

對(duì)Bean進(jìn)行索引

public?class?SolrItem?{

/**

* id,對(duì)應(yīng)Solr中記錄的Id

*/

@Field("id")

public?String?id;

/**

*?員工姓名

*/

@Field("title")

public?String?empName;

/**

*?員工郵箱

*/

@Field("subject")

public?String?email;

...

}

public?void?index()?throws?SolrServerException, IOException {

SolrItem item =?new?SolrItem();

item.setId("1");

item.setEmpName("張三");

item.setEmail("test@ppstream.com");

solrServer.addBean(item);

solrServer.commit();

}

2:搜索

public?void?query(String query) {

SolrParams params =?new?SolrQuery(query);

try?{

QueryResponse response =?solrServer.query(params);

SolrDocumentList?list = response.getResults();

for?(int?i = 0; i < list.size(); i++) {

fail(list.get(i));

}

}?catch?(SolrServerException e) {

e.printStackTrace();

}

}

3:刪除索引

public?void?delete(String params)?throws?SolrServerException, IOException {

solrServer.deleteByQuery(params);

//solrServer.deleteById(params);

}

4:高亮顯示

public?SolrDocumentList query(String str) {

SolrQuery query =?new?SolrQuery(str);

//設(shè)置高亮,以下兩種方式都行(相當(dāng)于開(kāi)啟高亮功能)

//query.setHighlight(true);

query.setParam("hl",?"true");?//highlighting

//設(shè)置高亮顯示的請(qǐng)求,高亮顯示的內(nèi)容由該參數(shù)決定,但是返回結(jié)果還是由SolrQuery決定

//query.setParam("hl.q", "email:zhang@ppstream.com");

/*

*?那些字段高亮顯示,可以用空格或者逗號(hào)分隔(有一個(gè)域的時(shí)候正常,兩個(gè)及以上沒(méi)測(cè)試通過(guò))

*?老版本使用query.addHighlightField("name");query.addHighlightField("description");給多個(gè)字段開(kāi)啟高亮功能

*/

query.setParam("hl.fl",?"name");

//高亮顯示字段前后添加html代碼

query.setHighlightSimplePre("");

query.setHighlightSimplePost("");

SolrDocumentList list =?new?SolrDocumentList();

SolrDocument document =?null;

QueryResponse response=new?QueryResponse();

try?{

SolrDocumentList documents = response.getResults();

//第一個(gè)Map的鍵是文檔的ID,第二個(gè)Map的鍵是高亮顯示的字段名

Map>> map = response.getHighlighting();

for(int?i=0;i

document = documents.get(i);

document.setField("name", map.get(document.getFieldValue("id")).get("name"));

/*document.setField("email", map.get(document.getFieldValue("id")).get("email"));*/

list.add(document);

}

}?catch?(Exception e) {

}

return?list;

}

Solr的其他應(yīng)用

1:對(duì)一篇文章的前100個(gè)分詞字創(chuàng)建索引

有時(shí)可能需要對(duì)某個(gè)字段(文章的內(nèi)容content)的前1000個(gè)字符創(chuàng)建索引并存儲(chǔ),可以在solrconfig.xml中添加1000實(shí)現(xiàn)(默認(rèn)是1萬(wàn))。這里是分詞數(shù)量,不是漢字或字母的個(gè)數(shù)。

2:配置中文分詞后,如果查詢“java編程思想”,會(huì)自動(dòng)拆分成java,編程,思想3個(gè)分詞依次進(jìn)行查找

3:多條件查詢

可以通過(guò)“編程?AND empName:XXX”進(jìn)行查詢,或者“編程?OR empName:XXX”等

4:字段當(dāng)做一個(gè)整體,不進(jìn)行分詞

如果某個(gè)字段不需要使用分詞,eg:java編程思想,只有在輸入完成的書(shū)名:java編程思想才會(huì)搜索出來(lái),可以在書(shū)名字段上的type使用不帶分詞的類(lèi)型(schema.xml中配置)

5:檢索索引中的部分字段

有時(shí)索引中可能存放很多信息,eg:書(shū)名,作者,出版時(shí)間,ISBN…….;在某次查詢中,我們只需要搜索結(jié)果書(shū)名和作者即可。可以通過(guò)如下方式實(shí)現(xiàn)

SolrQuery query =?new?SolrQuery(param);

//返回的結(jié)果

String[] str = {"title",?"author"};

query.setFields(str);

6:Solr的分頁(yè)

SolrQuery query =?new?SolrQuery("*:* AND (empName:XXX OR empName:XX)");

query.setHighlight(true);

query.setStart(0);

query.setRows(2);

QueryResponse response =?solrServer.query(query);

long?totalCount?= response.getResults().getNumFound();

totalCount返回的是滿足條件的總記錄條數(shù),并不一定是0或2

7:solrj高亮顯示時(shí),只顯示字段部分內(nèi)容

SolrDocumentList?list?= response.getResults();

Map>>?map?= response.getHighlighting();

//對(duì)應(yīng)的高亮字段(假設(shè)是content)。在list中顯示正確,map中顯示的只是content中的一部分。

query.setHighlightFragsize(100000);?//可以通過(guò)這種方法改變,設(shè)置一個(gè)比list中,對(duì)應(yīng)content內(nèi)容大的數(shù)字

query.setHighlightSnippets(0);//或者設(shè)置高亮片段為0,這樣關(guān)鍵字也就不會(huì)在高亮顯示

8:搜索條件的部分關(guān)鍵字高亮顯示

有時(shí)我們查詢根據(jù)條件“java OR (empId:1000 AND empId:1001)”搜索時(shí),結(jié)果如果高亮顯示,可能出現(xiàn)1000,1001數(shù)字也會(huì)高亮,但是我們只希望java關(guān)鍵字高亮,這個(gè)時(shí)候可以用下面的方法

query.setParam("hl.q",?"lucene solr");只對(duì)lucene和solr關(guān)鍵字進(jìn)行高亮顯示(solr不作為搜索條件也可以)

9:顯示第一個(gè)匹配關(guān)鍵字附近的部分內(nèi)容

有時(shí)我們需要顯示檢索出內(nèi)容的一部分(在列表頁(yè),只需要顯示一個(gè)概要信息),這時(shí)候可以通過(guò)設(shè)置query.setHighlightFragsize(100000);的大小來(lái)控制

10:schema文件,copyField配置

11:自動(dòng)補(bǔ)全

搜索時(shí)在title和content上進(jìn)行搜索,所以自動(dòng)補(bǔ)全時(shí)要在title和content上同時(shí)進(jìn)行。但是自動(dòng)補(bǔ)全只能在一個(gè)字段上進(jìn)行(目前我知道這樣),所以就創(chuàng)建一個(gè)新字段searchField=title+”,”+content用來(lái)進(jìn)行自動(dòng)補(bǔ)全的提示,該字段僅用來(lái)索引不需要存儲(chǔ)。

SolrQuery query =?new?SolrQuery(q);

query.addTermsField(searchField);

query.setTerms(true);

query.setTermsLimit(limit);

query.setTermsLower(pre);

query.setTermsPrefix(pre);

query.setQueryType("/terms");

QueryResponse qr =?solrServer.query(query);

TermsResponse resp = qr.getTermsResponse();

List list = resp.getTerms(searchField);

這種搜索存在的問(wèn)題:

1:?q:empName:XXX AND projecteId:19????pre:lucen???在搜索時(shí),返回的TermsResponse結(jié)果只應(yīng)用了pre一個(gè)條件

2:?title,content無(wú)法配置copyField字段使用complex(原因及解決辦法沒(méi)找到)

解決方法:改用Facet替換Term

SolrQuery query =?new?SolrQuery(q);

query.setFacet(true);

query.addFacetField(searchField);

query.setFacetLimit(limit);

query.setFacetPrefix(pre);

QueryResponse qr =?solrServer.query(query);

List fss = qr.getFacetFields();

FacetField ff = fss.get(0);

return?ff.getValues();

返回的fss結(jié)果仍然是根據(jù)pre一個(gè)條件返回的結(jié)果集,但是不滿足條件query的結(jié)果集中,對(duì)應(yīng)的count為0,即出現(xiàn)了0次

12:solr刪除索引后,索引文件還存在,但是搜索結(jié)果已經(jīng)不存在

13:添加tomcat驗(yàn)證,防止用戶直接通過(guò)地址欄訪問(wèn)solr,進(jìn)行修改刪除索引

1:修改tomcat-user.xml文件

2:修改solr的web.xml文件,添加如下代碼,對(duì)所有的請(qǐng)求,都需要tomcat用戶及密碼的驗(yàn)證

solr

/*

GET

POST

This applies only to the "tomcat" security role

admin

BASIC

admin

3:使用該方法后,通過(guò)solrj也不能直接訪問(wèn),修改如下

String url = PropertiesSon.getText("solr.serverUrl");

String username = PropertiesSon.getText("solr.username");

String password = PropertiesSon.getText("solr.password");

String host = PropertiesSon.getText("solr.host");

int?port = Integer.parseInt(PropertiesSon.getText("solr.port"));

DefaultHttpClient httpclient =?new?DefaultHttpClient();

httpclient.getCredentialsProvider().setCredentials(

new?AuthScope(host, port),

new?UsernamePasswordCredentials(username, password));

solrServer?=?new?HttpSolrServer(url, httpclient);

4:使用該方法創(chuàng)建時(shí),刪除添加索引報(bào)錯(cuò)“Cannot retry request with a non-repeatable request entity.”

修改方法:url用http://username:password@10.1.11.165:8081/solr取代http://10.1.20.57:8081/solr(httpclient使用?4.2是時(shí)正常,使用4.1時(shí),在刪除新增索引仍然會(huì)報(bào)上面的錯(cuò)誤)

總結(jié)

以上是生活随笔為你收集整理的solr java浏览器访问_solr解决访问安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。