在使用solr的時候,在管理頁面的analysis中可以發現有對詞的分析的展示,在solrj中同樣提供了方法獲得,記個筆記,方便以後再用的著。
使用solrj獲得分詞結果要使用fieldanalysisrequest類。
solrj提供的介面的邏輯和管理頁面的邏輯一樣,先是區分建立索引和查詢兩種情況(比如ik的使用時就是在建立索引的時候不適用智慧型分詞,而在查詢時啟用智慧型分詞),每種情況的分詞時再區分是哪個域(fieldname)或者是域的型別(filedtypes)。對於第乙個體現在fieldanalysisrequest的fieldvalue和query上,如果是建立索引時的分詞就使用fieldvalue,否則使用query(我已經做過測試),不過比較尷尬的是solrj不支援僅僅對query的設定,即如果不設定fieldvalue的話就會空指標的異常,我猜測他這個功能並不是完全模仿管理頁面的分詞,因為在返回的結果中他還提供了match的功能,也就是將query的和fieldvalue的分詞是否match體現出來,所以他不允許fieldvalue為null也就可以僅僅理解為他的侷限性了。對於第二個的體現是fieldnames和fieldtypes的設定上,即設定多個要匹配的分詞的域的名字或者是型別,以此得到分詞器,注意這裡無論是name還是type都是可以設定多個的,然後再獲得結果的時候指定要獲得域的名字或者型別的名字。
要獲得分詞的結果需要使用solrserver,呼叫fieldanalysisrequest.process(solrserver)方法,獲得乙個fieldanalysisresponse——也就是分詞的結果。在這裡面結果體現在兩個map中,乙個是fieldname的,乙個是fieldtype的,可以通過呼叫getfieldtypeanalysis(string type)或者getfieldnameanalysis(string name)獲得對於某乙個域的分詞器的處理結果,處理結果用analysis封裝。在analysis中,同樣存在建立索引時和查詢時的結果,也就是對應於fieldvalue和query的分詞結果,這樣就和上面的分析對應起來了。最終的分詞結果是analysisphase,對於建立索引的結果還是查詢時的,都是有多個analysisphase,而且乙個analysisphase中還有多個tokeninfo,這個我有點吃不透,為啥不是直接乙個list呢?儘管在analysisphase中新增了分詞器的類名,但是還是搞不懂為啥要分兩層。
最後上**
public static void main(string args) throws solrserverexception, ioexception
} // 獲得query的
result = sis.getqueryphases().iterator();
while(result.hasnext())
}}
在Solr中配置和使用ansj分詞
原文 在上一節 編譯ansj之solr外掛程式 二 在solr schema.xml中配置好ansj欄位型別。1 建立ansj型別。找到schema.xml,新增ansj型別text ansj org.ansj.solr.ansjtokenize ctory 是ansj lucene外掛程式。2 配...
ASP與ASPX中結果集對於注入的影響
文 ninty 從bs大牛那裡吸取的經驗,然後自己小小研究了一下,寫點筆記。先來看下面這段 set conn server.createobject adodb.connection conn.open driver server microsof 17a8a8 uid sa pwd sajjjjj...
SOLR配置預設的一元分詞與安裝主流的中文分詞擴充套件
引言 solr用的好不好,分詞是關鍵,分詞分的好不好,詞庫是關鍵。沒有完美的分詞和詞庫,只有更適合你 的分詞和詞庫。目前網路上主流的solr分詞模組 4 standardanalyzer chineseanalyzer cjkanalyzer ik canalyzer mik canalyzer m...