Tag: lucene

如何使Lucene索引与Mysql数据库保持同步?

我正在尝试利用Lucene在我的应用程序中开发全文搜索,这需要根据我的mysql数据库构建索引。 我想知道如何保持这些索引与db同步? 我提出了以下方法:1)紧密添加业务逻辑中的额外代码以更新搜索索引。 2)运行分离的任务以定期重建索引。 你有其他方法吗? 你认为最好的方法是什么? 任何评论都会很感激,谢谢!

Lucene 3.0.3数字术语查询

我在Lucene 3.0.3中有一个数字字段,它可以很好地处理范围查询。 如果我们切换到TermQuery,它不会产生任何结果。 例如: Document doc = new Document(); String name = “geolongitude”; NumericField numericField = new NumericField(name); double value = 29.0753505; String valueAsString = “29.0753505”; numericField.setDoubleValue(value); doc.add(numericField); indexWriter.addDocument(doc); indexWriter.commit(); indexWriter.close(); IndexSearcher indexSearcher = new IndexSearcher(open); Query termQ = new TermQuery(new Term(name, valueAsString)); TopDocs search = indexSearcher.search(termQ, 10); 在这种情况下,我没有得到任何结果。 我试图弄清楚是否存在任何“NumericTermQuery”但却无法找到。 我可以做一些棘手的事情(对我正在搜索的术语进行范围查询)但我不喜欢这个解决方案。 谢谢!

我的Lucene搜索没有返回结果

我正在学习Lucene,这是我的第一堂考试。 我正在尝试实现内存搜索并从示例中借用一些代码。 但搜索不能返回任何命中。 你可以帮帮我吗? 谢谢。 package my.test; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.util.CharArraySet; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.SearcherManager; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; public class TestInMemorySearch { public static void main(String[] args) { // Construct […]

Java程序使用或覆盖不推荐使用的API?

我编写了一个在Netbeans和Eclipse中编译和运行的程序没有任何问题。 但是当我尝试通过命令行编译它时: javac -classpath .:lucene-core-3.4.0.jar Indexer.java 我收到错误: Note: Indexer.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 当我尝试使用-Xlint编译时:弃用选项我得到: javac -classpath .:lucene-core-3.4.0.jar Indexer.java -Xlint:deprecation Indexer.java:14: warning: [deprecation] org.apache.lucene.index.IndexWriter.MaxFieldLength in org.apache.lucene.index.IndexWriter has been deprecated import org.apache.lucene.index.IndexWriter.MaxFieldLength; ^ 1 warning 我的源代码似乎是纯粹的,没有任何问题! 谁能帮我编译并在命令行中运行它? 码 import java.io.File; import java.io.FileFilter; import java.io.FileReader; import java.io.IOException; import java.io.File; import […]

Solr:如何动态提升有限数量的文件? 是否要修改QueryElevationComponent?

我的要求是为用户请求提升有限数量的(例如五个)文档。 我得到的是单个文档字段 ,其存储类似于表示电梯排名值的提升值的数值 。 因此,用户查询将返回具有最高电梯等级值的5个文档和剩余文档以按正常顺序填充页面。 怎么做? QueryElevationComponent仅允许静态查询定义。 Boosting不允许为特殊电梯排名字段增加有限数量的文档。 我是否必须编写修改后的QueryElevationComponent? 如果是,是否有很好的例子如何做到这一点? 或者是否存在另一种方法 ,我没有赶上? 感谢您的任何提示或想法!

Zend Lucene需要Java Lucene吗?

在实现Zend Lucene时,我们是否需要在服务器上安装Java?

Java Lucene 4.5如何通过大小写不敏感搜索

我们已经实现了Java Lucene搜索引擎4.5,我试图搜索内容,即使字段值不区分大小写(例如,如果我搜索名为“Banglore”的城市我得到一个结果,但是当我搜索一个名字的城市时“banglore”我得到0结果)。 我已经使用StandardAnalyzer来分析数据,使用WildcardQuery来匹配Like条件(我试过这里没有成功)。 我不知道我哪里出错了。 我很感激有关修复此区分大小写问题的任何指导。 public SearchHelper { Analyzer analyzer; Directory index; public IndexSearcher searcher = null; public IndexWriter indexWriter = null; public QueryParser parser = null; private static int hitsPerPage = 100; /** * @param indexFileLocation * @throws IOException */ public SearchHelper(String indexFileLocation) throws IOException { // this.analyzer =new StandardAnalyzer(); this.analyzer = new CaseStandardAnalyzer(); […]

如何在java中使用lucene添加自定义停用词

我正在使用lucene删除英语停止词,但我的要求是删除英语停止词和自定义停止词。 下面是我使用lucene删除英语停用词的代码。 我的示例代码: public class Stopwords_remove { public String removeStopWords(String string) throws IOException { StandardAnalyzer ana = new StandardAnalyzer(Version.LUCENE_30); TokenStream tokenStream = new StandardTokenizer(Version.LUCENE_36,newStringReader(string)); StringBuilder sb = new StringBuilder(); tokenStream = new StopFilter(Version.LUCENE_36, tokenStream, ana.STOP_WORDS_SET); CharTermAttribute token = tokenStream.getAttribute(CharTermAttribute.class); while (tokenStream.incrementToken()) { if (sb.length() > 0) { sb.append(” “); } sb.append(token.toString()); } return sb.toString(); } […]

如何在Java中一次性从整个字符串中转义所有特殊字符

Lucene支持转义属于查询语法的特殊字符。 当前列表中的特殊字符是 + – && || ! ( ) { } [ ] ^ ” ~ * ? : \ 要逃避这些角色,请在角色前使用\。 例如,搜索(1 + 1):2使用查询: \(1\+1\)\:2 我的问题是如何一次性逃离整个弦乐? 例如myStringToEscape = “ABC^ ” ~ * ? :DEF”; myStringToEscape = “ABC^ ” ~ * ? :DEF”;如何获取escapedString 。

Elasticsearch – EdgeNgram + highlight + term_vector =错误的亮点

当我使用带有edgengram的分析器(min = 3,max = 7,front)+ term_vector = with_positions_offsets 使用text =“CouchDB”的文档 当我搜索“couc”时 我的亮点是“cou”而不是“couc” 似乎我的亮点仅在于最小匹配标记“cou”,而我期望在确切的标记(如果可能)或至少找到最长的标记。 它使用term_vector = with_positions_offsets分析文本时工作正常 删除term_vector = with_positions_offsets的性能有什么影响?