gpt4 book ai didi

java - 使用 lucene 搜索从表中检索 SQL 日期数据类型

转载 作者:行者123 更新时间:2023-12-01 14:44:49 25 4
gpt4 key购买 nike

我在我的应用程序中使用 Lucene 3,6,2 作为搜索引擎 使用 java derby DB 和 swing 接口(interface)以及 netbeans IDE。

现在我可以从查询中检索所有信息 作为字符串数据类型。我提供下面的代码。

// create some index
Directory index = new RAMDirectory();
StandardAnalyzer analyzer = new StandardAnalyzer(matchVersion);
IndexWriterConfig IWConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);
IndexWriter iw = new IndexWriter(index,IWConfig) ;

try {

con = DriverManager.getConnection(host, uName, uPass);

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String sql = "SELECT * FROM APP.REGISTRY";
rs = stmt.executeQuery(sql);

rs.beforeFirst();
while(rs.next()) {
doc = new Document();
doc.add(new Field("id",rs.getString("ID"),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("subject",rs.getString("SUBJECT"),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("letter_from",rs.getString("LETTER_FROM"),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("date_of_letter",rs.getString("DATE_OF_LETTER"),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("date_received",rs.getString("DATE_RECEIVED"),Field.Store.YES,Field.Index.ANALYZED));

但是有一个日期列,我想从日期列中检索数据作为日期数据类型而不是字符串数据类型。

关于如何实现这一目标的任何建议。

最佳答案

您可以通过将日期转换为长整型 (Date.getTime()) 并将其存储为 NumericField 来实现此目的

NumericField letterDateField = new NumericField("date_of_letter",Field.Store.YES,true);
letterDateField.setLongValue(rs.getDate("DATE_OF_LETTER").getTime());
doc.add(letterDateField);
NumericField receivedDateField = new NumericField("date_received",Field.Store.YES,true);
receivedDateField.setLongValue(rs.getDate("DATE_RECEIVED").getTime());
doc.add(receivedDateField);

为了取回时间,只需提取长值并用它创建一个新的日期:

Date letterDate = new Date(doc.getField("date_of_letter").numericValue().longValue());

搜索范围时,您还需要将值转换为长整型,例如:

NumericRangeQuery.newLongRange("date_of_letter",minDate.getTime(),maxDate.getTime(),true,false)

或者,如果需要,您可以将日期的各个部分存储在单独的字段中(即年字段、月字段、日字段等)。这将允许您设计一些在存储数字日期值时会很困难或不可能的查询(例如,如果您想查询任何年份的二月日期的任何内容)。

就我个人而言,我建议不要使用 NumericUtils直接。

关于java - 使用 lucene 搜索从表中检索 SQL 日期数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15544733/

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