关于lucene+IK分词,查询条件越长,查询结果越多的问题怎么破 3C

如题,lucene+IK分词实现检索功能,目的是比数据库查询快的多,但是问题来了,如:我输入“小米”查询企业信息列表,返回了**小米**XXXXX公司、**小米**XXXXX服务公司。。。。。,我输入“小米科技”,返回了**小米**XXXXX公司、**小米**XXXXX服务公司、XXX百度**科技**XXXX公司,输入越精确分词返回结果集越多,想想觉得不太合理,希望将分词后返回包含所有分词后小词条的结果,但是没找到相应的办法,不知道有没坛友遇到类似问题有解决经验的,求指引!

PropKit.use(ConstantConfig.CONFIG_PROPERTIES);
Directory dir = FSDirectory.open(Paths.get(PropKit.get(ConstantConfig.LUCENCE_PATH)));// 打开索引目录
IndexSearcher isearcher = new IndexSearcher(DirectoryReader.open(dir));// search对象
IKAnalyzer analyzer = new IKAnalyzer(false);// IK分词器
// KeywordAnalyzer analyzer = new KeywordAnalyzer();
// StandardAnalyzer analyzer = new StandardAnalyzer();

List fieldNameList = new ArrayList();
List fieldValueList = new ArrayList();
fieldNameList.add(ConstantField.STATUS_CODE);
fieldValueList.add(StatusCode.STATUS_NORMAL.getValue());
fieldNameList.add("spName");
fieldValueList.add("小米科技");
// 分页查询
TopFieldCollector c = TopFieldCollector.create(new Sort(SortField.FIELD_SCORE), 50, false, false, false);

if (fieldNameList.size() < 1) {
isearcher.search(new MatchAllDocsQuery(), c);
} else {
String[] queries = new String[fieldNameList.size()];
String[] fields = new String[fieldNameList.size()];
BooleanClause.Occur[] clauses = new BooleanClause.Occur[fieldNameList.size()];

for (int i = 0; i < fieldNameList.size(); i++) {
queries[i] = fieldValueList.get(i);
fields[i] = fieldNameList.get(i);
clauses[i] = BooleanClause.Occur.MUST;
}
//多字段查询

QueryParser parser=new MultiFieldQueryParser(new String[]{""}, analyzer);

Query query = MultiFieldQueryParser.parse(queries, fields, clauses, analyzer);
isearcher.search(query, c);
}
System.out.println(c.getTotalHits());
ScoreDoc[] hits = c.topDocs(0, 50).scoreDocs;

List> dataList = new ArrayList>();
Map entity;
for (int i = 0; i < hits.length; i++) {
Document doc = isearcher.doc(hits[i].doc);
entity = new HashMap();
entity.put("spName", doc.get("spName"));
dataList.add(entity);
}
System.out.println(JSON.toJSON(dataList).toString());

1个回答

IK分词器本来就是按照词组分类的,你查询的关键词/句中只要包含那个词语就都能被查到

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于lucene的分词和查询
我想问下,如果我把一个中文字符传在索引的时候进行了分词,查询的时候也使用同一个分词器.rn如何让查询按照最大匹配度去进行?rn比如索引里的字符传是"问题说明越详细",分词分成了"问题","说明","越","详细".rn我用"如果问题说明越详细,回答也会越准确!"去查询,希望能查询到这个结果,需要怎么做?rn刚接触lucene,还很不熟悉.
Lucene分词后的结果
[img=https://img-bbs.csdn.net/upload/201411/14/1415933754_739607.png][/img]rnrn我使用FieldAnalysisRequest输出的结果是【半圆、 木、 Φ 、200】。rnrn如何得到分词之后的最终结果,即经过tokenizer和filter之后的结果【半圆、 木、200】?rnrn请各位指点,谢谢! rnrn急。。
Lucene自定义分词:合并IK分词+二元分词
索引命中效果不佳,采用IK分词与二元分词的效果都不是特别好,于是设计了新的自定义分词器,先将句子用IK分词分开,再对长度超过3的词进行二元分词。 以下是分词器的实现效果图。 实现思路 先建立IK分词器,在通过第一层filter将IK分的词截留,长度大于等于3的词置入CJK分词器进行处理,然后得到的结果送入第二层filter中进行去重。因为在上一层中会出现大量重复词.下面贴代码。 package c
Lucene分词查询
非常珍贵的Lucene入门实例,让你在最短时间内掌握Lucene快速创建索引,中文分词查询的技巧。 内赠送lucene驱动包,物超所值哦!!
Lucene分词与查询详解
Lucene分词与查询详解。这是一个完整的实例,希望对大家的开发学习有帮助!!!
lucene的实战项目——实现ik分词和高亮显示
lucene的简单的项目,本项目使用springboot实现简单的ik分词和高亮显示 一.配置pom文件 4.0.0 cn.et Lucene_Project 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-parent 1.5.9.RELE
lucene的简单的项目实现ik分词和高亮显示
本项目使用springboot实现简单的ik分词和高亮显示 一.配置pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.
IC分词和IK分词
一、   IC中文分词 1.   简介: 下载地址:http://www.ictclas.org/ 中科院的分词开源包,但是有版权! 2. 使用:       \Sample\Windows_64_jni_Demo 把这个扔进eclipse中。           其中:ICTCLAS 是放在src的包,TestMain是测试程序,其它放在根目录。 二、IK分词    
lucene IK分词,电话号码搜索不到
我使用IKAnalyzer3.2.0Stable进行的分词,lucene-3.0.2,rn电话号码”0571-12345686“,rn如果找到0571-12345686能找到,rn”12345686“找不到rn”-12345686“找到,rn现在如果要搜索12345686怎么才能搜索出来呢?rn还有手机号码,能不能通过一小部分的号码查找出来呢,比如13456789644,希望通过134567能搜索出来,不知道 怎么才能搜索出来?rn先谢谢了!
lucene查询结果的问题
请问lucene查询结果与sql语句有很小的误差,正常吗?rn比如:lucene查出48条记录,sq查出50条记录。
IK和Lucene
IKAnalyzer所有的Jar包以及lucene3.6.0和lucene5.0.0相关的jar包,IKAnalyzer2012兼容lucene3.6.0,IKAnalyzer兼容lucene有限
关于lucene分词
现在在改进一个使用lucene做的图书搜索程序,目前的做法是,这里以题名为例,就是使用lucene建索引的时候,题名不分词,然后检索的时候,分两种情况,[color=#FF0000]如果输入的是英文,就按标题全匹配(主要是为了避免检索词为java的时候不会检索出javascript,adjava等无关的)[/color];如果是输入的是中文,就按检索词两遍通配符匹配,比如有本书书名是“java编程思想”,按现有的方案,输入完整的书名,可以检索到该图书,如果输入“编程思想”或“编程”或“思想”也可以检索出来,但是如果检索词为“java”就检索不出来。rn 现在我的想法是,对题名进行分词,对检索词也进行分词,这样“java编程思想”会被分词为“java”、“编程”、“思想”,同时对检索词也进行分词,检索词为“java编程”、“java思想”、“java编程思想”的时候都能搜索的到。但我看了很多成熟的文献检索程序,比如中国知识网的,如果检索词为“java编程思想”、“java编程”可以检索的到,检索词为“java思想”检索不到,也就是说他们没有对题名和检索词进行分词,但是我输入java的时候,他们也没有检索到无关的结果,全是跟java相关的,请问他们是怎么做的?
ik分词与拼音分词jar包
ik分词修改后适用于solr6.4.2验证通过,拼音分词支持全拼简拼与误拼
lucene分词问题
索引内分词放了new Field("title",, YES, ANALYZED);rn检索过程中new Term("title",value);rnvalue内放两个汉字能查到结果集,放三个汉字就查不到结果,这是为什么啊???
lucene搜索分词问题
我在项目的分词器采用的是qieqie的庖丁解牛分词器,现在出现的问题是当搜“运动”的时候可以把包含“运动”的记录搜出来,但是如果只搜索“运”则却找不到含有“运动”的记录。请问这个问题怎么解决?rn 我也知道这是分词的原因,当在词典里找到“运动”就不会再分词为“运”和“动”,那搜索的时候如果只搜索一个字就根本不会搜索出来,但是对客户而言他们是无法理解的,我也无法对他们这样去解释搜索不到的理由。对他们而言要看的就是结果,就是能搜索出来。rn
分词lucene
lucene官网: http://lucene.apache.org (lucene-4.0.0.zip ) 中文分词器: 1. http://code.google.com/p/ik-analyzer/ (IK_Analyzer_2012FF_hf1.zip) 2. https://code.google.com/p/mmseg4j/ (mmseg4j-1.9.1.v20130120-SNAPSHOT.zip) 查看分词库: http://code.google.com/p/luke/downloads/list (lukeall-4.0.0-ALPHA.jar )
lucene分词索引问题
网上有好多lucene的简单用法rn例如rntry rn Analyzer analyzer = new StandardAnalyzer(); rn rn //将索引存在内存中 rn Directory directory = new RAMDirectory(); rn //将索引存在磁盘的话,用下面这句 rn //Directory directory = FSDirectory.getDirectory("/tmp/testindex", true); rn IndexWriter iwriter = new IndexWriter(directory, analyzer, true); rn iwriter.setMaxFieldLength(25000); rn Document doc = new Document(); rn [color=#3366FF]TokenStream stream=analyzer.tokenStream("content",new StringReader("你们好啊,为什么"));[/color]rn [color=#FF0000]/* String text = "你们好啊,为什么nn"; rn doc.add(new Field("fieldname", text, Field.Store.YES, rn Field.Index.TOKENIZED)); */ [/color]rn doc.add(new Field("fieldname",stream));rn iwriter.addDocument(doc); rn iwriter.close(); rn rn rn IndexSearcher isearcher = new IndexSearcher(directory); rn // Parse a simple query that searches for "text": rn QueryParser parser = new QueryParser("fieldname",analyzer); rn Query query = parser.parse("为什么"); rn rn Hits hits = isearcher.search(query); rn if(hits.length() == 1) rn rn System.out.println("搜索\"text\""); rn Document d = hits.doc(0); rn System.out.println(d.get("fieldname")); rn else rn rn System.out.println("没有搜索到结果"); rn rn // 遍历搜索结果: rn for (int i = 0; i < hits.length(); i++) rn Document hitDoc = hits.doc(i); rn System.out.println(hitDoc.get("fieldname")); rn rn isearcher.close(); rn directory.close(); rn catch (IOException e) rn e.printStackTrace(); rn catch (ParseException e) rn e.printStackTrace(); rn rn rn rn如上面所示例子,在拥红色部分时可以出结果,但用蓝色tokenstream后就不行,这是为什么呢rn我想用那个tokenstream的分词结果。rn还有tokenStream(String fieldName, Reader reader) rn中的fieldName与doc.add(new Field("fieldname",stream));中的fieldname有什么区别或联系啊rn
lucene查询不到结果
package edu.usc.uscnetopinion;rnrnimport java.io.File;rnimport java.io.FileNotFoundException;rnimport java.io.FileReader;rnimport java.io.IOException;rnrnimport org.apache.lucene.analysis.standard.StandardAnalyzer;rnimport org.apache.lucene.document.Document;rnimport org.apache.lucene.document.Field;rnimport org.apache.lucene.index.CorruptIndexException;rnimport org.apache.lucene.index.IndexReader;rnimport org.apache.lucene.index.IndexWriter;rnimport org.apache.lucene.index.IndexWriterConfig;rnimport org.apache.lucene.queryParser.ParseException;rnimport org.apache.lucene.queryParser.QueryParser;rnimport org.apache.lucene.search.IndexSearcher;rnimport org.apache.lucene.search.Query;rnimport org.apache.lucene.search.ScoreDoc;rnimport org.apache.lucene.search.TopDocs;rnimport org.apache.lucene.store.Directory;rnimport org.apache.lucene.store.FSDirectory;rnimport org.apache.lucene.store.LockObtainFailedException;rnimport org.apache.lucene.util.Version;rnrnpublic class HelloLucene rn public void index()rn Directory directory = null;rn IndexWriterConfig iwc = null;rn IndexWriter indexWriter = null;rn try rn directory = FSDirectory.open(new File("E:\\J2EE\\hellolucene\\index0"));rn iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));rn indexWriter = new IndexWriter(directory, iwc);rn File files = new File("E:\\J2EE\\hellolucene\\example");rn for(File file : files.listFiles())rn Document doc = new Document();rn doc.add(new Field("content", new FileReader(file)));rn doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.ANALYZED));rn doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.ANALYZED));rn System.out.println(doc.getField("path"));rn rn catch (CorruptIndexException e) rn e.printStackTrace();rn catch (LockObtainFailedException e) rn e.printStackTrace();rn catch (FileNotFoundException e) rn e.printStackTrace();rn catch (IOException e) rn e.printStackTrace();rn finallyrn if(indexWriter != null)rn try rn indexWriter.close();rn catch (CorruptIndexException e) rn e.printStackTrace();rn catch (IOException e) rn e.printStackTrace();rn rn rn rn rn rn public void searcher()rn rn try rn Directory directory = FSDirectory.open(new File("E:\\J2EE\\hellolucene\\index0"));rn IndexReader reader = IndexReader.open(directory);rn IndexSearcher searcher = new IndexSearcher(reader);rn QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));rn Query query = parser.parse("java");rn TopDocs tds = searcher.search(query, 10);rn ScoreDoc[] sds = tds.scoreDocs;rn System.out.println(sds.length);rn for(ScoreDoc sd : sds)rn Document d = searcher.doc(sd.doc);rn System.out.println(d.get("filename") + " + " + d.get("path"));rn rn rn if(reader != null)rn try rn reader.close();rn catch (IOException e) rn e.printStackTrace();rn rn rn catch (CorruptIndexException e) rn e.printStackTrace();rn catch (IOException e) rn e.printStackTrace();rn catch (ParseException e) rn e.printStackTrace();rn rn rn rnrnrnrn/*rn打印出来的sds.length总是0啊。example文件夹放的是txt的文件,包含有要搜索的关键字的。index0文件夹存放索引rn*/rnrnrnrnrnrnrn
lucene分词搜索问题
我用的分词器是jeasy.analysis.MMAnalyzer,这个是以词典来分词的!rn在我的lucene中,当我用搜索字符串“中国人”搜索时,能搜索到相关的记录,当我用“我是中国人”却搜索不到。索引库中有包含“中国人”的字段,却没有包含“我是中国人”的字段rn“我是中国人”经过这个分词器,是分割成“我”“中国人”的。rnrn那么我的问题就是,类似于“****中国人***”之类的短语都搜多不到的话?那么这个lucene就是去了意义?我的目的是,只要这个短语中包含有索引库中的关键词,那么就应该给我搜索出来才对。rnrn请问大家,这个问题如何解决呢?
lucene 分词的问题
在ChineseAnalyzer,StandardAnalyzer下为什么 a the 这两词不能被索引.而SimpleAnalyzer 下可以正确被索引.rnrn如果 the hello world 在 StandardAnalyzer 下 只有hello world 被索引.
IK分词组件大小写的问题
IK分词器在加载词典时, 词典中的大小写字符加载到内存时一律变为小写, 但是在分词时大小写是不会转换的, 所以就有以下情况发生: 当词典中有"HL定理", 对"HL定理的应用"分词时是不能分出"HL定理"的, 处理办法:在讲要分词的句子输入分词器前, 先将所有的大些字母转化为小写, 这样分词出来的就是 "hl定理"
Lucene查询结果高亮
检索结果高亮对于用户的体验度和友好度非常重要,可以快速标记出用户检索对关键词。本例中的索引仍使用上一篇博客( Lucene查询索引)中创建的索引,代码高亮参考了Lucene4.x高亮 fast高亮 前端高亮。实现效果:核心代码package ucas.ir.lucene;import java.io.File; import java.io.IOException;import javax.prin
solr导入 IK分词
solr导入Ik分词专用。
IK Analyzer 分词
中文分词 IK Analyzer 源码
IK的整个分词处理过程
IK的整个分词处理过程 首先,介绍一下IK的整个分词处理过程: 1. Lucene的分词基类是Analyzer,所以IK提供了Analyzer的一个实现类IKAnalyzer。首先,我们要实例化一个IKAnalyzer,它有一个构造方法接收一个参数isMaxWordLength,这个参数是标识IK是否采用最大词长分词,还是采用最细粒度切分两种分词算法。实际两种算法的实现,最大...
IK分词jar包
IK分词jar包
solr:IK分词方法
下面两种方法是我在实际工作项目中用到的分词,需要引入IKAnalyzer-3.2.8.jar包。 /** * @author: kxl * 分词 */ public String analyse(String word) { try { Analyzer analyzer = new IKAnalyzer(false);
热更新 IK 分词使用方法
安装步骤: 1、到github网站下载源代码,网站地址为:https://github.com/medcl/elasticsearch-analysis-ik 注意,下载对应的版本: IK version ES version master 1.5.0 -&amp;gt; master 1.4.0 1.6.0 1.3.0 1.5.0 1.2.9 1.4.0 1.2.8 1.3.2 1.2.7 1.2.1...
IK分词solr5.0.0
IK分词solr5.0.0
ElasticSearch的ik分词插件开发
 ik插件,说白了,就是通过封装ik分词器,与ElasticSearch对接,让ElasticSearch能够驱动该分词器。那么,具体怎么与ElasticSearch对接呢?从下往上走,总共3步: 一、封装IK分析器     与ElasticSearch集成,分词器的配置均从ElasticSearch的配置文件读取,因此,需要重载IKAnalyzer的构造方法,然后继承ElasticSea...
Ik分词插件安装
Elasticsearch 5.4新闻搜索项目实战视频教程:本课程基于Java开发,通过项目案例的方式讲解Elasticsearch分布式搜索引擎(Elasticsearch索引)中的核心技术,ES的版本为5.4,学员学习本课程以后可以初级实现类似百度新闻搜索项目。rnrnElasticSearch是一个基于Lucene的分布式搜索引擎,适合做大数据搜索和大数据分析,百度、腾讯、360、斗鱼、快手、饿了么等诸多一线互联网公司都在使用Elasticsearch。rnrn1.课程提供完整课件和源代码 2.支持QQ群答疑。rnrn
IK分词插件测试运行
<p>rn <span style="color:#3D3D3D;">本课程为ElasticSearch6.6视频搜索项目实战课程,项目基于Java开发,通过视频搜索项目案例的方式讲解Elasticsearch分布式搜索引擎中的核心技术,学员学习本课程以后可以初级实现类似优酷视频搜索项目。</span> rn</p>rn<p>rn <span style="color:#3D3D3D;"><img src="https://img-bss.csdn.net/201905300834044673.jpg" alt="" /><br />rn</span> rn</p>
Solr集成IK分词
<p>n <span style="color:#999999;font-size:16px;background-color:#F3F4F5;">Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的 全文搜索引擎 </span>n</p>n<p>n <span style="color:#999999;font-size:16px;background-color:#F3F4F5;">n n 课程特点n n </span></p><p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 毕业后接触的第一个中间件就是Solr,在工作中用处广泛,为了便于大家快速掌握该技能,开始录制相关课程,该专栏特点如下:n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 1.采用Solr最新版本视频录制,全网最新课程(Solr8.1于2019年5月16日发布)n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 2.技能点全网最全,会结合工作经验,项目中用到的技能点都会有所涉及,更新章节比较全面n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 3.适用范围广,从零基础到高级架构以及分布式集群都涵盖,适用初级、高级、项目实战等多个层次开发者n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 4.多种维度辅助学习,采用独立solr粉丝群辅助教学,学员问题会及时得到解决,程序员突破圈 打卡制度,督促学员学习n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 关注后再购买、 关注后再购买、 关注后再购买n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n <span style="font-size:inherit;">课程能得到什么</span>n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 1.快速学习到最新版本的全文检索技术,从视频、文章、圈子、粉丝交流等快速促进学习n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 2.通过该技术,获得面试进阶指导n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 3.结交人脉(庞大的粉丝群)n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n ..n </p>n n Endn n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 初期学员100人,价格不会太高,也是为了帮助更多的开发者n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 但是个人精力有限,所以限制条件如下n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 1.求知欲强,有想向技术更深一层了解的n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 2.乐于交流,喜欢探讨技术者n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 3.学习惰性者慎入,购买后会督促大家学习,购买不是目的,学习到该技能才是该专栏的主要目的n </p>n <p style="font-size:16px;color:#5D5D5D;background-color:#FFFFFF;">n 正式进入学习状态了吗,专栏群见。n </p>n<br />
IK分词适用于solr5.31
这个ik分词已经做了更改。能试用与solr5.3.1版本。
elasticsearch ik 分词包
elasticsearch 分词器,最大粒度和最细粒度分词分好用
ES ik分词代码
Es基于Lucene分词搜索, 自带ik中文分词解释器,适合中文搜索
es ik分词
ES2.2.1对应IK分词为elasticsearch-analysis-ik-1.8.1 cd  /usr/elasticsearch-2.2.1/plugins/ mkdir ik 将ik1.8.1解压后文件放入es安装目录下 /usr/elasticsearch-2.2.1/plugins/ik     不需要elasticsearch-analysis-ik-1.8.1目
Hadoop IK分词 词频统计
本文实验使用的是IK Analyzer作为分词器, Hadoop2.4作为计算框架的测试DEMO. 第一步: 搭建Ecelipse, 使用MAVEN构建. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
安装ik分词插件
下载IK安装包 https://github.com/medcl/elasticsearch-analysis-ik https://github.com/medcl/elasticsearch-analysis-ik/releases 解压 tar –zxvf elasticsearch-analysis-ik-5.4.0.tar.gz...
solr6.5使用的IK分词
用于solr6.5的IK分词包,内含使用说明及配置文件
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池