国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Solr通過特殊字符分詞實現自定義分詞器詳解

Solr通過特殊字符分詞實現自定義分詞器詳解

2020-12-24 13:26隨-憶 Java教程

最近因為工作的需要,要做一個分詞器,通過查找相關的資料最終用solr實現了,下面這篇文章主要給大家介紹了關于Solr通過特殊字符分詞實現自定義分詞器的相關資料,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。

前言

我們在對英文句子分詞的時候,一般采用采用的分詞器是whitespacetokenizerfactory,有一次因業務要求,需要根據某一個特殊字符(以逗號分詞,以豎線分詞)分詞。感覺這種需求可能與whitespacetokenizerfactory相像,于是自己根據solr源碼自定義了分詞策略。

業務場景

有一次,我拿到的數據都是以豎線“|”分隔,分詞的時候,需要以豎線為分詞單元。比如下面的這一堆數據:

Solr通過特殊字符分詞實現自定義分詞器詳解

有可能你拿到的是這樣的數據,典型的例子就是來自csv文件的數據,格式和下面這種類似:

Solr通過特殊字符分詞實現自定義分詞器詳解

分詞思路

在solr的schema.xml文件中,有這樣的配置

?
1
2
3
4
5
<fieldtype name="text_ws" class="solr.textfield" positionincrementgap="100">
 <analyzer>
  <tokenizer class="solr.whitespacetokenizerfactory"/>
 </analyzer>
</fieldtype>

對于字段類型text_ws,指定了一個分詞器工廠whitespacetokenizerfactory,根據這個類,可以實現通過空格來分詞,那么我通過豎線分詞的代碼應該與之類似。

修改源碼

在java工程中引入如下jar包:

?
1
2
3
4
5
<dependency>
  <groupid>org.apache.solr</groupid>
  <artifactid>solr-core</artifactid>
  <version>6.0.0</version>
</dependency>

參照whitespacetokenizerfactory的源碼,寫一個自己的myverticallinetokenizerfactory,內容基本不變:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.trainning.project.custom;
 
import java.util.arrays;
import java.util.collection;
import java.util.map;
 
import org.apache.lucene.analysis.tokenizer;
import org.apache.lucene.analysis.core.unicodewhitespacetokenizer;
import org.apache.lucene.analysis.util.tokenizerfactory;
import org.apache.lucene.util.attributefactory;
 
/**
* @author jiangchao
* @date 2017年4月2日下午3:41:13
*/
public class myverticallinetokenizerfactory extends tokenizerfactory{
 public static final string rule_java = "java";
 public static final string rule_unicode = "unicode";
 private static final collection<string> rule_names = arrays.aslist(rule_java, rule_unicode);
 
 private final string rule;
 
 /** creates a new myverticallinetokenizerfactory */
 public myverticallinetokenizerfactory(map<string,string> args) {
  super(args);
 
  rule = get(args, "rule", rule_names, rule_java);
 
  if (!args.isempty()) {
  throw new illegalargumentexception("unknown parameters: " + args);
  }
 }
 
 @override
 public tokenizer create(attributefactory factory) {
  switch (rule) {
  case rule_java:
   return new myverticallinetokenizer(factory);
  case rule_unicode:
   return new unicodewhitespacetokenizer(factory);
  default:
   throw new assertionerror();
  }
 }
}

具體做分詞的myverticallinetokenizer代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.trainning.project.custom;
 
import org.apache.lucene.analysis.util.chartokenizer;
import org.apache.lucene.util.attributefactory;
 
/**
* @author jiangchao
* @date 2017年4月2日下午9:46:18
*/
public class myverticallinetokenizer extends chartokenizer {
 
 public myverticallinetokenizer() {
 
 }
 public myverticallinetokenizer(attributefactory factory) {
  super(factory);
  }
 
  /** collects only characters which do not satisfy
  * 參數c指的是term的ascii值,豎線的值為 124
  */
  @override
  protected boolean istokenchar(int c) {
  return !(c == 124);
  }
}

這里最主要的方法就是istokenchar,它控制了分詞的字符,如果需要使用逗號分詞的話,字需要將這個方法修改成下面這樣:

?
1
2
3
4
5
6
7
/** collects only characters which do not satisfy
 * 參數c指的是term的ascii值,逗號的值為 44
 */
 @override
 protected boolean istokenchar(int c) {
 return !(c == 44);
 }

整合

代碼寫好了,怎么使用呢?首先,需要把剛才的java文件打成jar包。我使用的是eclipse,直接選中兩個類文件,右鍵 -> export -> jar file -> select the export destination: ->選擇輸出路徑,填一個jar名字:myverticallinetokenizerfactory -> finish

得到的myverticallinetokenizerfactory.jar文件大約3kb,將改文件放置到.\solr_home\lib下,在shcema.xml中定義自己的field

?
1
2
3
4
5
6
<fieldtype name="vertical_text" class="solr.textfield">
 <analyzer>
  <tokenizer class="com.trainning.project.custom.myverticallinetokenizerfactory"/>
 </analyzer>
 </fieldtype>
 <field name="custom" type="vertical_text" indexed="true" stored="false"/>

注意這里的class是剛才自己寫的分詞器的完整類名。

打開solr主頁,在analysis頁面測試一下,是否實現了預期?

源碼下載:

github:下載地址

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.csdn.net/jiangchao858/article/details/68954044

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 观看av| av网站地址 | 中文字幕一区二区三区在线观看 | 亚洲国产精品网站 | 欧美大片一区 | 一级免费片| 中国黄色片在线观看 | 亚洲精品久久久久久久久久久 | 亚洲午夜精品视频 | 国产女无套免费网站 | 亚洲欧美日韩精品久久亚洲区 | 久久久久久成人 | 九九热欧美 | 亚洲一区二区精品 | 日韩免费高清视频 | 久久亚洲综合 | 欧美xo影院 | 国产淫片在线观看 | 中文字幕69av | 国产精品一区三区 | 久久久久国产精品免费免费搜索 | 一区二区三区在线 | 成人免费视频网站 | 欧美大片黄 | 一级毛片免费网站 | 欧美日韩三级在线 | 日韩在线字幕 | 欧美日一区二区 | 国产成人福利在线 | 久久久久高清 | 毛片一级在线观看 | 亚洲一区二区三区蜜桃 | 久久亚洲欧美日韩精品专区 | 欧美精品久久久久久久久老牛影院 | 日本欧美一区二区 | 激情久久婷婷 | bxbx成人精品一区二区三区 | 亚洲精品白浆高清久久久久久 | 中文字幕在线观看视频一区 | 毛片网站免费在线观看 | 噜噜噜视频在线观看 |