论坛首页 Java企业应用论坛

发布IKAnnlyzer3.2.0稳定版 for Lucene3.0

浏览 27880 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-01-14   最后修改:2010-01-14
		QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field,
				analyzer);
		Query query = null;
		query = parser.parse(str);
		// query为PhraseQuery的对象
		query = IKQueryParser.parse(field, str);
//query为 BooleanQuery的对象,不为什么这样呢??

  PhraseQuery应该与词语的顺序有关系,而booleanQuery就不一定了.

0 请登录后投票
   发表时间:2010-01-14  
ModifiableSolrParams params = new ModifiableSolrParams();
		//spellCheckCompRH这句是开启solr的拼写检查的!建议先去solr的控制台查询结果看看!
		//如果屏蔽掉的话,是没有什么问题的,因为我有时候是不开启它的,使用没有错误的!
		//params.set("qt", "/spellCheckCompRH");
		params.set("q", "ssh");
		params.set("spellcheck", "on");
		params.set("spellcheck.build", "true");
		QueryResponse response = null;
		try {
			response = solr.query(params);
		} catch (SolrServerException e) {
			e.printStackTrace();
			return;
		}

跟着lianj_lee文章学习,进行查询测试,竟然只能查询出索引库中英文记录,包含中文的记录,检索不出来
直接使用http://localhost:8080/solr/core0/admin/ 的查询结果也是一样,包含中文的记录检索不到
<schema name="example core one" version="1.1">
  <types>
   <fieldtype name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
   
   <!-- A text field that only splits on whitespace for exact matching of words -->
    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      </analyzer>
    </fieldType>
    <!-- user IK ,代替掉下面的 -->
	<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
	    <analyzer type="index">
			<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" />
			<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
			<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" /> 
			<filter class="solr.LowerCaseFilterFactory" />
			<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
			<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
	    </analyzer>
	    <analyzer type="query">
			<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" />
			<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
			<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
			<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />  
			<filter class="solr.LowerCaseFilterFactory" />
			<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
			<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
	    </analyzer>
	</fieldType> 
  </types>

 <fields>   
  <!-- general -->
  <field name="id"       type="string"    indexed="true"  stored="true"  multiValued="false" required="true"/>
  <field name="type"     type="string"    indexed="true"  stored="true"  multiValued="false" /> 
  <field name="name"     type="string"    indexed="true"  stored="true"  multiValued="false" /> 
  <field name="author"    type="string"   indexed="true"  stored="true"  multiValued="false" />
  <field name="summary"    type="string"   indexed="true"  stored="true"  multiValued="false" />
  <field name="keywords"    type="string"   indexed="true"  stored="true"  multiValued="false" />
  <field name="core1"    type="string"    indexed="true"  stored="true"  multiValued="false" /> 
  <field name="all" type="text" indexed="true" stored="false" multiValued="true"/>  
 </fields>

 <!-- field to use to determine and enforce document uniqueness. -->
 <uniqueKey>id</uniqueKey>

 <!-- field for the QueryParser to use when an explicit fieldname is absent -->
 <defaultSearchField>name</defaultSearchField>

 <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
 <solrQueryParser defaultOperator="OR"/>
 
 <copyField source="id" dest="all"/>
 <copyField source="name" dest="all"/>
 <copyField source="summary" dest="all"/>
 <copyField source="author" dest="all"/>
 <copyField source="keywords" dest="all"/>
 
0 请登录后投票
   发表时间:2010-01-14  
看来是我自己的失误,是不存在问题的.没有引进jk 直接就导入了数据
0 请登录后投票
   发表时间:2010-01-15  
Query query = IKQueryParser.parseMultiField(new String[] {
	                "shop_Name", "keyword" ,"province"}, keyword, flags);
			// 搜索相似度最高的5条记录----如果这里的相似度设置太低,会引起数组越界
			topDocs = isearcher.search(query, null ,5);

设置相似的度为5,但是实际检索大于5,就会引起
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at com.xjj.IKAnalyzer.IKAnalyzerDemo.search(IKAnalyzerDemo.java:130)
	at com.xjj.IKAnalyzer.IKAnalyzerDemo.main(IKAnalyzerDemo.java:43)
0 请登录后投票
   发表时间:2010-01-15   最后修改:2010-01-15
IK可以不用他自带的词典,而只用我自己定义的词典?

我的目的是想要分析提取出一个文章的所有关键词(我把关键词作为词典)
0 请登录后投票
   发表时间:2010-01-15  
中文分词跟lucence的版本有什么关系,不是可以独立的吗?先通过中文分词把词分好,然后传给搜索引擎不就行了?
0 请登录后投票
   发表时间:2010-01-16  
Arden 写道
中文分词跟lucence的版本有什么关系,不是可以独立的吗?先通过中文分词把词分好,然后传给搜索引擎不就行了?


哥哥不做Lucene吧,理论上两者没关系,但是lucene新旧版本的分词接口不一样,就变的有关系了。
0 请登录后投票
   发表时间:2010-01-27  
用的3.0及此分词器,在addDocument时报了一下java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z

请问是什么问题
0 请登录后投票
   发表时间:2010-01-27  
zctya 写道
用的3.0及此分词器,在addDocument时报了一下java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z

请问是什么问题


java 接口的版本不对,会造成找不到抽象方法的异常。具体原因就多样化了,查查jar的实际引用版本吧,常常是IDE没有把正确的jar分布到lib的目录里,会有这个问题
0 请登录后投票
   发表时间:2010-01-27  
开源代码能共享下吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics