Tag: lucene

关键字(OR,AND)在Lucene搜索

我在我的门户网站(基于J2EE)中使用Lucene进行索引和搜索服务。 问题是关于Lucene的关键字。 当您在搜索查询中使用其中一个时,您将收到错误。 例如: searchTerms = “ik OR jij” 这很好,因为它会搜索”ik”或”jij” searchTerms = “ik AND jij” 这很好,它搜索”ik”和”jij” 但是当你搜索: searchTerms = “OR” searchTerms = “AND” searchTerms = “ik OR” searchTerms = “OR ik” 等等,它将失败并出现错误: 组件名称:STSE_RESULTS类:org.apache.lucene.queryParser.ParseException消息:无法解析’OR jij’:在第1行第0列遇到“OR”。 期待以下之一: … 这是有道理的,因为这些词是Lucene的关键词可能是保留的,并将作为关键词。 在荷兰语中,“OR”这个词很重要,因为它对“Ondernemings Raad”有意义。 它被用在许多文本中,需要找到它。 例如“或”确实有效,但不返回与术语“OR”匹配的文本。 我怎样才能让它可以搜索? 如何转义关键字“或”? 或者,我如何告诉Lucene将“或”视为搜索词而不是关键词。

将标记添加到lucene令牌流

我写了一个TokenFilter ,它在一个流中添加了令牌。 1.测试显示它有效,但我不完全理解为什么。 如果有人能够阐明语义,我将不胜感激。 特别是在(*) ,恢复状态,这是否意味着我们要么覆盖当前令牌,要么在捕获状态之前创建令牌? 这大致就是我所做的 private final LinkedList extraTokens = new LinkedList(); private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); private State savedState; @Override public boolean incrementToken() throws IOException { if (!extraTokens.isEmpty()) { // Do we not loose/overwrite the current termAtt token here? (*) restoreState(savedState); termAtt.setEmpty().append(extraTokens.remove()); return true; } if (input.incrementToken()) { if (/* condition […]

用lucene提取tf-idf向量

我使用lucene索引了一组文档。 我还为每个文档内容存储了DocumentTermVector。 我写了一个程序并为每个文档得到了术语频率向量,但是如何获得每个文档的tf-idf向量? 这是我的代码,在每个文档中输出术语频率: Directory dir = FSDirectory.open(new File(indexDir)); IndexReader ir = IndexReader.open(dir); for (int docNum=0; docNum<ir.numDocs(); docNum++) { System.out.println(ir.document(docNum).getField("filename").stringValue()); TermFreqVector tfv = ir.getTermFreqVector(docNum, "contents"); if (tfv == null) { // ignore empty fields continue; } String terms[] = tfv.getTerms(); int termCount = terms.length; int freqs[] = tfv.getTermFrequencies(); for (int t=0; t < termCount; t++) […]

有效搜索小文本

我有许多小文本(比如大约500个单词)和两个数据库,每个大约有10,000个条目(关键字)。 我现在想要处理每个文本,并找出文本中包含哪些关键字(保存在2个数据库中的关键字)。 你们中的任何人都有一个如何有效地做到这一点的好方法吗? 在搜索数据库之前,我想处理每个文本并将其编入索引(或者使用lucene),但我真的不知道lucene是否是正确的工具。

为什么Query,TermQuery等不再在Lucene 4.0中实现Serializable?

我需要使用EJB在网络上发送一个包含Lucene元素(如Query的类,当然这个类需要序列化。 我将我的类标记为Serializable但似乎不够: org.apache.lucene.search.TermQuery is not Serializable 实际上,当我阅读Lucene(4.0)的最后一个稳定版本的javadoc时,我可以看到TermQuery没有实现Serializable, Query 。 我不明白的是为什么这些类在上一版本(3.6.1)中用于实现Serializable ,为什么它不再是这种情况?

使用JdbcDirectory在数据库中创建Lucene索引

我有问题MyQSL和Postgresql9.2这是问题所在: org.apache.lucene.store.jdbc.JdbcStoreException: Failed to execute sql [insert into LUCENE_INDEX_TABLE (name_, value_, size_, lf_, deleted_) values ( ?, ?, ?, current_timestamp, ? )]; nested exception is org.postgresql.util.PSQLException: Les Large Objects ne devraient pas être utilisés en mode auto-commit. org.postgresql.util.PSQLException: Les Large Objects ne devraient pas être utilisés en mode auto-commit. at org.postgresql.largeobject.LargeObjectManager.createLO(LargeObjectManager.java:239) at org.postgresql.largeobject.LargeObjectManager.createLO(LargeObjectManager.java:226) at org.postgresql.jdbc2.AbstractJdbc2Statement.setBlob(AbstractJdbc2Statement.java:3048) […]

IndexReader.getFieldNames Lucene 4

我们在这里从Lucene 3.3.0升级到Lucene 4.2.1,我似乎无法找到旧的IndexReader.getFieldNames方法的替代品。 谷歌搜索引出了一张新的IndexReader.getFieldInfos方法的票 ,但这是实验性的,似乎不再存在 – 这条路很冷。 如何在Lucene 4中复制IndexReader.getFieldNames的行为?

Duke快速重复数据删除:java.lang.UnsupportedOperationException:操作尚不支持?

我正在尝试使用Duke快速重复数据删除引擎在我工作的公司的数据库中搜索一些重复记录。 我从命令行运行它,如下所示: java -cp “C:\utils\duke-0.6\duke-0.6.jar;C:\utils\duke-0.6\lucene-core-3.6.1.jar” no.priv.garshol.duke.Duke –showmatches –verbose .\config.xml 但是我收到一个错误: Exception in thread “main” java.lang.UnsupportedOperationException: Operation no t yet supported at sun.jdbc.odbc.JdbcOdbcResultSet.isClosed(Unknown Source) at no.priv.garshol.duke.datasources.JDBCDataSource$JDBCIterator.close(JD BCDataSource.java:115) at no.priv.garshol.duke.Processor.deduplicate(Processor.java:152) at no.priv.garshol.duke.Duke.main_(Duke.java:135) at no.priv.garshol.duke.Duke.main(Duke.java:38) 我的配置文件如下所示: 0.82 0.80 test ID LNAME no.priv.garshol.duke.comparators.ExactComparator 0.6 0.8 FNAME no.priv.garshol.duke.comparators.ExactComparator 0.6 0.8 MNAME no.priv.garshol.duke.comparators.ExactComparator 0.3 0.5 SSN no.priv.garshol.duke.comparators.ExactComparator 0.0 1.0 它并没有真正告诉我什么是不受支持的…我只是尝试一下,配置还没有什么严重的。

弹性搜索中的模式匹配?

继续我之前的post ,我根据femtoRgon的post更改了查询,弹性搜索不支持某些字符和锚点。 我正在寻找匹配模式的方式,如“xxx-xx-xxxx”,以便使用elastic search带有社会安全号码的文档。 让我们假设,在索引文档中,我想找到所有那些社会安全号码与“xxx-xx-xxxx”模式匹配的文档。 索引文档的示例代码: InputStream is = null; try { is = new FileInputStream(“/home/admin/Downloads/20121221.doc”); ContentHandler contenthandler = new BodyContentHandler(); Metadata metadata = new Metadata(); Parser parser = new AutoDetectParser(); parser.parse(is, contenthandler, metadata, new ParseContext()); } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) is.close(); } 用于搜索的示例代码 QueryBuilder queryBuilderFullText = […]

JVM在Lucene DataInput.readVInt上崩溃

在使用Lucene索引文档时,我的JVM(1.6.0_29)在密集使用时不断崩溃。 我明白了: # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00002b6b196d767c, pid=26417, tid=1183217984 # # JRE version: 6.0_29-b11 # Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode linux-amd64 compressed oops) # Problematic frame: # J org.apache.lucene.store.DataInput.readVInt()I # # If you would like to […]