我正在尝试使用ApacheLucene制作可搜索的电话/本地企业目录。我有街道名称、公司名称、电话号码等字段。我遇到的问题是,当我尝试按街道名称包含多个词(例如“新月”)的街道进行搜索时,没有结果被退回。但是,如果我尝试仅使用一个词进行搜索,例如“新月”,我会得到所有想要的结果。我正在使用以下索引数据:StringLocationOfDirectory="C:\\dir\\index";StandardAnalyzeranalyzer=newStandardAnalyzer(Version.LUCENE_34);DirectoryIndex=newSimpleFSDirectory(L
我正在构建Lucene索引并添加文档。我有一个多值字段,在这个例子中我将使用类别。一个项目可以有很多类别,例如,牛仔裤可以属于服装、裤子、男士、女士等。将字段添加到文档时,逗号有区别吗?Lucene会忽略它们吗?如果我将逗号更改为空格,会有区别吗?这会自动使该字段成为多值吗?StringcategoriesForItem=getCategories();//returns"category1,category2,cat3"fromaDBcallcategoriesForItem=categoriesForItem.replaceAll(",","").trim();//notsurei
我有一个数据集,在底层文本上有多层注释,例如part-of-tags,chunksfromashallowparser,nameentities,和其他来自各种naturallanguageprocessing(自然语言处理)工具。对于像Themanwenttothestore这样的句子,注释可能如下所示:WordPOSChunkNER====================TheDTNPPersonmanNNNPPersonwentVBDVP-toTOPP-theDTNPLocationstoreNNNPLocation我想使用Lucene为一堆带有注释的文档编制索引,然后跨不同层执
我在上面使用了Lucene和Compass,但遇到了一个问题:try{CompassHitshits=compassQuery.hits();for(CompassHitcompassHit:hits){if(results.size()>=maxResults){Log.info(this,"Numberofresultsexceeded%,dforquery%s",maxResults,query);break;}else{results.add((T)compassHit.getData());}}}当compassHit.getData());获取数据时,命中率为100,则重新
我正在使用Lucene开发Web应用程序的搜索组件。我想将用户查询保存到索引中,并使用它们向用户建议备用查询,并保留查询统计信息(最常用的查询、得分最高的查询……)。要将此数据用于备用查询建议,我会分析查询以查看哪些术语最常相互使用,并使用它来为用户创建建议。但我想不出用哪种形式来索引数据。我正在考虑简单地将查询添加到索引中,但那样可能会有很多冗余数据,因为索引中的许多文档都具有相同的内容。有没有人对实现这一目标的方式有任何想法?感谢您的帮助。 最佳答案 "Iwasthinkingofsimplyaddingthequeriesin
我有一些BigDecimal值,应该为搜索编制索引。Lucene有NumericField,但它只有long、double、float和int的setter。我可以将它存储为字符串,但那样我就无法从NumericRangeQuery中受益。您如何存储BigDecimals?有什么最佳做法可以分享吗? 最佳答案 如果一切都失败了,考虑扩展AbstractField(类似于NumericField扩展它的方式),TokenStream(类似于NumericTokenStream的方式扩展它)和MultitermQuery(类似于Nume
我的用例涉及索引一个Lucene文档,然后在未来的多个场合添加指向该现有文档的术语,这不会为每个新术语删除和重新添加整个文档(因为性能,并且不保留原始文档条款)。我知道一个文件不能真正更新。我的问题是为什么?或者更准确地说,为什么不支持所有形式的更新(术语、存储字段)?为什么不可能添加另一个术语以指向现有文档-从技术上讲:不是所有需要的是将现有文档ID放置在术语的发布列表中。为什么这么难?是否存在一些不可变的统计数据?是否有任何解决方法来支持我将术语(索引字段)添加到现有文档的用例? 最佳答案 Idoknowthatadocumen
哪个lucene分析器可以用来正确处理日语文本?它应该能够处理汉字、平假名、片假名、罗马字及其任意组合。 最佳答案 你应该看看CJKLucene的contrib区域中的包。有一个分析器和一个分词器专门用于处理中文、日文和韩文。 关于java-什么lucene分析器可以用来处理日语文本?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1625000/
一、基础知识1、Lucene是什么Lucene是一个本地全文搜索引擎,Solr和ElasticSearch都是基于Lucene的封装Lucene适合那种轻量级的全文搜索,我就是服务器资源不够,如果上ES的话会很占用服务器资源,所有就选择了Lucene搜索引擎2、倒排索引原理全文搜索的原理是使用了倒排索引,那么什么是倒排索引呢?先通过中文分词器,将文档中包含的关键字全部提取出来,比如我爱中国,会通过分词器分成我,爱,中国,然后分别对应‘我爱中国’然后再将关键字与文档的对应关系保存起来最后对关键字本身做索引排序3、与传统数据库对比LuceneDB数据库表(table)索引(index)行(row)
为了允许用户使用Lucene3.5跨多个字段进行搜索,我目前创建并添加了一个QueryParser对于每个要搜索的字段DisjunctionMaxQuery.这在使用OR作为默认运算符时效果很好,但我现在想将默认运算符更改为AND以获得更准确(和更少)的结果。问题是,queryParser.setDefaultOperator(QueryParser.AND_OPERATOR)遗漏了许多文档,因为所有术语必须至少在1个字段中。例如,考虑文档的以下数据:title字段="ProgrammingLanguages",body字段="Java,C++,PHP"。如果用户要搜索JavaProg