gpt4 book ai didi

java - Apache Lucene - 创建和存储索引?

转载 作者:行者123 更新时间:2023-11-29 05:30:31 30 4
gpt4 key购买 nike

这篇文章是我之前问题的后续: Apache Lucene - Optimizing Searching

我想根据存储在数据库中的标题创建索引,将索引存储在我运行网络应用程序的服务器上,并让所有使用网络应用程序搜索功能的用户都可以使用该索引。

我会在添加、编辑或删除新标题时更新索引。

我找不到在 Apache Lucene 中执行此操作的教程,所以任何人都可以帮助我用 Java 编写此代码(使用 Spring)。

最佳答案

根据我对您问题的理解,您需要执行以下操作:

1) 索引你的数据(你的标题)首先,您需要实现为您的数据创建该索引的代码,请查看此代码示例。

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

// Store the index in memory:
//Directory directory = new RAMDirectory();

Store an index on disk
Directory directory = FSDirectory.open(indexfilesDirPathOnYourServer);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Document doc = new Document();
String title = getTitle();
doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
iwriter.addDocument(doc);
iwriter.close();

在这里你需要遍历所有数据。

2) 搜索索引数据。您可以使用以下代码搜索您的数据:

DirectoryReader ireader = DirectoryReader.open(indexfilesDirPathOnYourServer);
IndexSearcher isearcher = new IndexSearcher(ireader);
// Parse a simple query that searches for "text":
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "fieldname", analyzer);//note here we used the same analyzer object
Query query = parser.parse("test");//test is am example for a search query
ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
// Iterate through the results:
for (int i = 0; i < hits.length; i++) {
Document hitDoc = isearcher.doc(hits[i].doc);
System.out.println(hitDoc.get("fieldname"));
}
ireader.close();
directory.close();

注意:这里你不必从你的数据库中获取所有数据,你可以直接从索引中获取。此外,您不必每次用户搜索或获取数据时都重新创建整个索引,您可以在逐个添加/更新或删除时不时更新标题(已更新或删除的标题不是整个索引标题)。

更新索引使用:

Term keyTerm = new Term(KEY_FIELD, KEY_VALUE);
iwriter.updateDocument(keyTerm, updatedFields);

删除索引使用:

Term keyTerm = new Term(KEY_FIELD, KEY_VALUE);
iwriter.deleteDocuments(keyTerm);

希望对你有帮助。

关于java - Apache Lucene - 创建和存储索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21232250/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com