主题 : lucene3.0关于StandardAnalyzer分词查询
级别: 解元
UID: 111107
积分:345 加为好友
威望: 7 精华: 0
主题:38 回复:116
注册时间:2017-03-02
在线时长:0
1#   发表于:2017-03-17 14:14:08  IP:60.152.*.*
  private static String text = "中国,古时通常泛指中原地区,与中华中夏 中土中州含义相同。古代华夏族、汉族建国于黄河流域一带,以为居天下之中,故称中国";  
public static void main(String[] args) throws IOException, ParseException {
 System.out.println("=====一元========StandardAnalyzer=====分词========");  
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
Query q = new TermQuery(new Term("title", "滑板鞋"));

System.out.println(q.toString());
QueryParser qp = new QueryParser(Version.LUCENE_30, "title", analyzer);
        Query query1 = qp.parse("换滑板鞋");
        System.out.println(query1.toString());
   
        Query query2 = qp.parse(text);
        System.out.println(query2.toString());
}

这是我的车是代码片段,创建索引的时候是分词成功了的,但是查询,分词失败,像滑板鞋,应该分词成title:滑 title:板 title:鞋 二现在分词成了title:滑 板 鞋,明显不对,所以两个词查询的时候就找不到结果。
级别: 版主
UID: 70293
积分:78391 加为好友
威望: 1 精华: 0
主题:7 回复:68397
注册时间:2014-12-03
在线时长:0
2#   发表于:2017-03-17 14:16:36  IP:117.115.*.*
1
级别: 解元
UID: 111107
积分:345 加为好友
威望: 7 精华: 0
主题:38 回复:116
注册时间:2017-03-02
在线时长:0
3#   发表于:2017-03-17 14:23:02  IP:60.152.*.*
回复第2楼

    private static String text = "中国,古时通常泛指中原地区,与中华中夏 中土中州含义相同。古代华夏族、汉族建国于黄河流域一带,以为居天下之中,故称中国";  
public static void main(String[] args) throws IOException, ParseException {
 System.out.println("=====一元========StandardAnalyzer=====分词========");  
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
Query q = new TermQuery(new Term("title", "滑板鞋"));

System.out.println(q.toString());
QueryParser qp = new QueryParser(Version.LUCENE_30, "title", analyzer);
        Query query1 = qp.parse("换滑板鞋");
        System.out.println(query1.toString());
   
        Query query2 = qp.parse(text);
        System.out.println(query2.toString());
}

点击运行3.0的结果:
title:"换 滑 板 鞋"
title:"中 国 古 时 通 常 泛 指 中 原 地 区 与 中 华 中 夏" title:"中 土 中 州 含 义 相 同 古 代 华 夏 族 汉 族 建 国 于 黄 河 流 域 一 带 以 为 居 天 下 之 中 故 称 中 国"

lucene 5.2版本的:
  private static String text = "中国,古时通常泛指中原地区,与中华中夏 中土中州含义相同。古代华夏族、汉族建国于黄河流域一带,以为居天下之中,故称中国";  
public static void main(String[] args) throws IOException, ParseException {
 System.out.println("=====一元========StandardAnalyzer=====分词========");  
Analyzer analyzer = new StandardAnalyzer();  
Query q = new TermQuery(new Term("title", "滑板鞋"));

System.out.println(q.toString());
QueryParser qp = new QueryParser( "title", analyzer);
        Query query1 = qp.parse("换滑板鞋");
        System.out.println(query1.toString());
   
        Query query2 = qp.parse(text);
        System.out.println(query2.toString());
}
运行结果:
title:换 title:滑 title:板 title:鞋
(title:中 title:国 title:古 title:时 title:通 title:常 title:泛 title:指 title:中 title:原 title:地 title:区 title:与 title:中 title:华 title:中 title:夏) (title:中 title:土 title:中 title:州 title:含 title:义 title:相 title:同 title:古 title:代 title:华 title:夏 title:族 title:汉 title:族 title:建 title:国 title:于 title:黄 title:河 title:流 title:域 title:一 title:带 title:以 title:为 title:居 title:天 title:下 title:之 title:中 title:故 title:称 title:中 title:国)

就是3.0实现分词失败,导致查询输入关键字两个字的时候就查询失败了,我看你们的demo是正常的,所以问问


级别: 解元
UID: 111107
积分:345 加为好友
威望: 7 精华: 0
主题:38 回复:116
注册时间:2017-03-02
在线时长:0
4#   发表于:2017-03-17 15:39:02  IP:60.152.*.*
已解决
级别: 版主
UID: 70293
积分:78391 加为好友
威望: 1 精华: 0
主题:7 回复:68397
注册时间:2014-12-03
在线时长:0
5#   发表于:2017-03-17 15:41:33  IP:117.115.*.*
1
1 共1页