草庐IT

java - Lucene:使用默认运算符搜索多个字段 = AND

为了允许用户使用Lucene3.5跨多个字段进行搜索,我目前创建并添加了一个QueryParser对于每个要搜索的字段DisjunctionMaxQuery.这在使用OR作为默认运算符时效果很好,但我现在想将默认运算符更改为AND以获得更准确(和更少)的结果。问题是,queryParser.setDefaultOperator(QueryParser.AND_OPERATOR)遗漏了许多文档,因为所有术语必须至少在1个字段中。例如,考虑文档的以下数据:title字段="ProgrammingLanguages",body字段="Java,C++,PHP"。如果用户要搜索JavaProg

java - 选择正确的 Lucene 目录

可用于构建Lucene索引的目录类型有很多种。哪一个最适合提高RedHat机器上的搜索速度(不确定操作系统是否相关)?RAMDirectory-无法使用,索引太大SimpleFSDirectory-不能是这个,因为它是“简单的”...MMapDirectory-也许是这个?NIOFSDirectory-还是这个?有更好的选择吗? 最佳答案 除非您有充分的理由选择其中之一,否则我建议您直接调用FSDirectory.open(File).这允许Lucene决定哪种实现是理想的。好奇的是,这里是如何做出决定的:publicstaticF

java - Java 中数据规范化的拼写更正

我正在寻找一个Java库来对用户生成的文本内容进行一些初始拼写检查/数据规范化,想象一下在Facebook个人资料中输入的兴趣。此文本将在某个时间点(拼写更正之前或之后,效果更好)进行标记化,其中一些用作搜索关键字(完全匹配)。减少拼写错误等以产生更多匹配会很好。如果更正在比一个单词长的标记上表现良好,那就更好了,例如“trinkingcoffee”会变成“drinkingcoffee”而不是“thinkingcoffee”。我找到了以下用于进行拼写更正的Java库:JAZZY似乎没有在积极开发中。此外,由于在社交网络配置文件和多词标记中使用了非标准语言,因此基于字典距离的方法似乎不够

java - 如何使用加权函数对多个字段的搜索结果进行排序?

我有一个Lucene索引,其中每个文档都有几个包含数值的字段。现在我想根据该字段的加权和对搜索结果进行排序。例如:field1=100field2=002field3=014权重函数如下所示:f(d)=field1*0.5+field2*1.4+field3*1.8结果应按f(d)排序,其中d代表文档。排序函数应该是非静态的,并且可能因搜索而异,因为常量因素会受到执行搜索的用户的影响。有没有人知道如何解决这个问题,或者知道如何以另一种方式实现这个目标? 最佳答案 您可以尝试实现自定义ScoreDocComparator.例如:pub

java - 根据数字字段对 Lucene 中的搜索结果进行排序

我有一些包含两个字段的文档:文本、计数。我已经使用Lucene来索引文档,现在我想在文本中搜索并获得按计数降序排序的结果。我该怎么做? 最佳答案 ApacheLucene的默认搜索实现返回按分数排序的结果(最相关的结果在前),然后按id(最早的结果在前)。可以在查询时使用附加的排序参数自定义此行为。TopFieldDocsSearcher#search(Queryquery,Filterfilter,intn,Sort排序)Sort参数指定用于排序的字段或属性。默认实现是这样定义的:newSort(newSortField[]{So

java - 写入 Lucene 索引,一次一个文档,随着时间的推移变慢

我们有一个程序,它持续运行,做各种事情,并更改我们数据库中的一些记录。这些记录使用Lucene编制索引。所以每次我们改变一个实体时,我们都会做类似的事情:打开数据库事务,打开LuceneIndexWriter在事务中对数据库进行更改,并使用indexWriter.deleteDocuments(..)然后indexWriter.addDocument(..)在Lucene中更新该实体.如果一切顺利,提交数据库事务并提交IndexWriter。这工作正常,但随着时间的推移,indexWriter.commit()需要越来越多的时间。最初它需要大约0.5秒,但经过数百次此类交易后,它需要超

java - 如何使lucene不区分大小写

默认情况下单词“Word”和“word”是不一样的。如何让Lucene不区分大小写? 最佳答案 最简单的方法是将所有可搜索内容和查询小写。查看LowerCaseFilter文档。您还可以使用Wildcard查询进行不区分大小写的搜索,因为它会绕过Analyzer。如果愿意,您可以将内容存储在不同的字段中以捕获不同的案例配置。 关于java-如何使lucene不区分大小写,我们在StackOverflow上找到一个类似的问题: https://stackover

java - Lucene 6.0!如何实例化 BooleanQuery 并在其中添加其他搜索查询?

如何在Lucene6.x中实例化BooleanQuery?如何使用boolean查询在其中添加其他查询?在Lucene4.x中,我们使用BooleanQuery如下:BooleanQuerybooleanQuery=newBooleanQuery();booleanQuery.add(query1,BooleanClause.Occur.MUST);booleanQuery.add(query2,BooleanClause.Occur.MUST);如何在Lucene6中实现这一点。 最佳答案 BooleanQuery现在是不可变的(

java - Elasticsearch 服务器发现配置

我已经安装了ElasticSearch服务器,我正在运行它:$./elasticsearch-f{0.18.2}[11698]:initializing...loaded[],sites[]{0.18.2}[11698]:initialized{0.18.2}[11698]:starting...bound_address{inet[/0:0:0:0:0:0:0:0:9300]},publish_address{inet[/192.168.1.106:9300]}new_master[Stingray][ocw4qPdmSfWuD9pUxHoN1Q][inet[/192.168.1.1

java - 第一次搜索迭代后,自动建议在 Lucene 中不起作用

目前我正在我的应用程序中使用lucene处理自动建议部分。单词的自动建议在控制台应用程序中工作正常,但现在我已经集成到Web应用程序,但它没有按预期方式工作。当第一次使用某些关键字搜索和自动建议搜索文档时,两者都可以正常工作并显示结果。但是当我再次搜索其他关键字或相同关键字时,自动建议和搜索结果都没有显示。我无法弄清楚为什么会出现这种奇怪的结果。自动建议和搜索的片段如下:finalintHITS_PER_PAGE=20;finalStringRICH_DOCUMENT_PATH="F:\\Sample\\SampleRichDocuments";finalStringINDEX_DIR