Tag: lucene

lucene 4.0快照中缺少function

我正在尝试使用lucene 4.0快照版本,但是在这个版本中缺少StandardAnalyzer :(。有人知道如何替换它吗? 在Lucene Summary中给出的示例代码中 使用StandardAnalyzer,但没有找到的地方.. 提前致谢。

Lucene QueryParser在多个线程中:每次同步或构造新的?

我有一个Web应用程序,用户向Lucene索引提交查询。 查询由Lucene QueryParser解析。 我学到了QueryParser不是线程安全的困难方法。 使用单个QueryParser实例并同步对其parse()方法的调用是否更好? 或者为每个查询构造一个新实例是否更好? (或者我可以通过QueryParser池更好地服务吗?) 我知道,一般来说这样的问题取决于具体情况并要求分析,但也许有人可以明确地说“ QueryParser的构建非常便宜/昂贵”?

什么是最精确的匹配排名最好的lucene设置

当我希望精确匹配排名高于“部分”匹配时,应该使用哪些分析器进行索引和搜索? 可能在Similarity类中设置自定义评分? 例如,当我的索引包含car parts , car和car shop (使用lucene 3.5上的StandardAnalyzer索引)时,对”car”的查询会导致: 汽车零件 汽车 汽车店 (基本上按照添加顺序返回,因为它们都得到相同的分数)。 我想看到的是car排名第一,然后是其他结果(真正重要的是哪个顺序,我认为分析仪可以影响那个)。

仅根据lucene中有更多术语出现的文件来计算得分

我开始研究基于lucene.net引擎的简历检索(文档)组件。 它工作得很好,它可以获取文档并根据文档对其进行评分 VSM背后的想法是,相对于该术语在集合中的所有文档中出现的次数,查询术语在文档中出现的次数越多,该文档与查询的相关性就越高。 Lucene的实用评分function源于以下内容。 score(q,d)=coord(q,d)·queryNorm(q)· ∑( tf(t in d) ·idf(t)2 · t.getBoost() · norm(t,d) ) t in q 在这 tf(t in d)与术语的频率相关,定义为术语t出现在当前得分文档中的次数d。 具有更多特定术语的文档会获得更高的分数 idf(t)代表逆文档频率。 该值与docFreq的倒数(术语t出现的文档数)相关。 这意味着更罕见的术语对总分的贡献更高。 在大多数情况下确实非常好,但由于现场规范计算结果不准确 fieldnorm aka“field length norm”值表示该doc中该字段的长度(因此较短的字段会自动提升)。 由于这个原因,我们没有得到准确的结果。 举个例子,我有10000个文件,其中3000个文件有java和oracle关键字。 并且每个文档看起来都没有变化。 假设doc A在1000个单词中得到10个java 20 oracle,而doc B在50个单词中得到2个java 2 oracle 如果我正在搜索“java和oracle”查询,则由于长度规范化,lucene返回高分的文档B. 由于业务的性质我们需要检索文件得到更多的搜索关键字出现应该先来,我们并不真正关心文件的长度。 因此,一个带有大量关键字的简历的Guy在结果中被移到了下面,并且出现了一些小的简历。 为了避免这种情况,我需要禁用长度标准化。 有人可以帮我弄这个吗?? 我附上了Luke结果图片供您参考。 在此图像中,使用java 50次和oracle 6次的文档向下移动到第11位。 但是这个带有java 24次和oracle 5次的文档因为fieldnorm而成为最佳射手。 希望我清楚地传达信息……如果不是,请问我,我会提供更多信息

Google App Engine(Java)上的全文搜索

关于这个主题有几个线程浮动,但我认为我的用例有些不同。 我想做的事: 我的GAE / J应用程序的全文搜索组件 索引大小很小:25-50MB左右 我不需要对索引进行实时更新,定期重新索引也没问题 这是为了自动完成等,所以它需要非常快(我得到的印象是在数据存储区中实现反向索引会引入相当大的延迟) 到目前为止我的策略(只是计划,尚未尝试实施任何东西): 将Lucene与RAMDirectory一起使用 定期cron作业创建索引,将其序列化到数据存储区,存储更新ID(或时间戳) 搜索servlet在启动时加载索引并创建RAMDirectory 在每个请求上,servlet检查当前的更新ID并根据需要重新加载索引 我模糊的主要问题是如何在实例之间同步内存中的数据 – 这会起作用吗,还是我错过了什么? 另外,在我开始使用内存问题之前,我可以在多大程度上推送它? 我在GAE的RAM配额上找不到任何东西。 (这个索引很小,但我想想更多我想添加的东西) 当然,对更好方法的任何想法?

如何打开Lucene 4.3索引?

我是一个Lucene新手,我正在尝试使用Luke打开一个Lucene 4.3索引(我用我简单的Lucene 4.3.1应用程序创建),但它一直给我: 该位置的目录无效,请检查控制台以获取更多信息。 最后一个exception:java.lang.IllegalArgumentException:名称为“Lucene42”的类型为org.apache.lucene.codecs.Codec的SPI类不存在。 您需要将支持此SPI的相应JAR文件添加到类路径中。当前类路径支持以下名称:[Lucene40,Lucene3x,SimpleText,Appending] 精细。 所以我将代码中使用的Lucene版本设置为Version.LUCENE_43 。 我也尝试过早期的3.x版本。 我在这做错了什么? 是否可以使用另一个Lucene索引浏览器? 我正在使用java -jar lukeall-4.0.0-ALPHA.jar运行Luke,我告诉它打开我的应用程序正在生成的索引。 更新: 我已经尝试将我的CLASSPATH设置为包含lucene-core:4.3.1:jar。 这没有用。 卢克抛出这个错误: java.lang.IllegalArgumentException:名称为“Lucene42”的类型为org.apache.lucene.codecs.Codec的SPI类不存在。 您需要将支持此SPI的相应JAR文件添加到类路径中。当前类路径支持以下名称:[Lucene40,Lucene3x,SimpleText,Appending] java.lang.IllegalArgumentException:类型为org.apache.lucene.codecs的SPI类名称为“Lucene42”的.Codec不存在。 您需要将支持此SPI的相应JAR文件添加到类路径中。当前类路径支持以下名称:[Lucene40,Lucene3x,SimpleText,Appending] 非常感谢!

查找lucene索引中的文档数

使用Java如何找出lucene索引中的文档数量?

Lucene IndexWriter线程安全

Lucene鼓励从多个线程重用IndexWriter。 鉴于两个线程可能具有对IndexWriter的引用,如果线程A在编写器上调用close,则线程B将留下无用的编写器。 但据我所知,lucene以某种方式知道另一个线程使用相同的编写器并推迟其闭包。 确实如此吗? lucene如何跟踪另一个线程使用编写器? 编辑根据答案判断,关闭IndexWriter是不正确的。 但这会带来一个新问题:如果一个人保持IndexWriter打开,实质上阻止从另一个JVM访问此索引(例如,在群集的情况下,或许多应用程序之间的共享索引)。

当用户数量增加时,Lucene Indexing中的打开文件太多

我一直在为我的Web应用程序使用Lucene Indexing和搜索技术。 最初,我遇到了“太多的打开文件问题”,经过研究后我通过使用常见的IndexSearcher为单个用户修复了它。 然后,当我使用更多并发用户测试应用程序时,它再次开始带来“太多打开文件问题”。 我将IndexSearcher对象保留在特定用户的会话中,这始终保持一些文件打开(他们当前正在使用)。 即使有任何数量的用户,任何人都可以帮助解决这个问题吗? 如果我在上述解释中的任何地方都不清楚,请告诉我。

查询Lucene

表“testtable”的结构是 id int主键 productid int attributeid int value varchar(250) 其中productid是产品的唯一ID,attributeid是产品属性的唯一ID,例如尺寸,质量,高度,颜色,’value’是属性的值 我必须过滤结果。 我通过此查询达到了要求。 但我无法在查询中进行此操作。 select a.* from dbo.testtable a where a.attributeId=10 and a.[Value]=’Romance’ and productId in ( select productId from dbo.testtable where attributeId =7 and [Value]=’Hindi’ ) 需要帮助来构建此查询..