Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lucene 4.0中的日期范围搜索_Java_Date_Search_Lucene_Range - Fatal编程技术网

Java Lucene 4.0中的日期范围搜索

Java Lucene 4.0中的日期范围搜索,java,date,search,lucene,range,Java,Date,Search,Lucene,Range,在LUCENE 4.0中,我需要搜索两个日期范围(包括下限值和上限值)之间的数据。 索引中有一个字段,其字符串值的格式为“YYYY-MM-DD HH:MM:SS”。现在我需要在日期范围之间进行搜索。但我没有得到我所期望的结果。下面是我的代码- String startValue = "2008-01-01 00:00:45"; String endValue = "2016-02-10 00:00:00"; Query query = new TermRangeQuery("Field51",

在LUCENE 4.0中,我需要搜索两个日期范围(包括下限值和上限值)之间的数据。 索引中有一个字段,其字符串值的格式为“YYYY-MM-DD HH:MM:SS”。现在我需要在日期范围之间进行搜索。但我没有得到我所期望的结果。下面是我的代码-

String startValue = "2008-01-01 00:00:45";
String endValue = "2016-02-10 00:00:00";
Query query = new TermRangeQuery("Field51",  new BytesRef(startValue), new BytesRef(endValue), true, true);
//Final Query for Search
Final Query for Search  :  Field51:[2008-01-01 00:00:45 TO 2016-02-10 00:00:00]
129 documents found. Time taken :93 milli seconds.
上面的查询给出了从2009年开始的结果。将跳过2008年和2009年之间的任何日期。所以,若我的开始日期是2010年,那个么我将得到的结果是从2011年开始

一种解决方案是以毫秒为单位为日期字段编制索引,以便执行数字搜索。但是我不想改变我约会的方式

我已经迭代了点击,并将结果转换为HashMap的ArrayList,如下所示

[{Field51=2009-09-06 13:58:09}, {Field51=2009-02-02 13:51:14}, {Field51=2009-01-17 08:11:02}, {Field51=2009-09-29 12:55:34},....
我有129个结果,但没有一个结果的日期是2008年。而我有2008年的数据


有必要知道您是如何为字段编制索引的。不过,我怀疑你也得到了2016年的所有结果,而不仅仅是2016年1月的结果。我强烈建议您看看。基本上,我正在将数据从mqsql移动到lucene。为此,我将我的数据导出到一个可能包含数百万数据的csv中。现在csv中的每一行对我来说都是唯一的记录,由唯一的列标识,第一行是标题。因此,我拿起标题,将其保存在ArrayList中,然后一次读取下1000条记录,处理它以创建索引。我的标题是字段,行中的数据是值。对于每一行,我创建一对标题字段和当前行值。对于处理的每一行,我给它一个唯一的文档Id,它只是每一行中的唯一值。PFA屏幕截图。索引(插入)时此字段的字段类型是什么?例如,如果它是TextField,那么分析器将文本拆分为标记(因此2009-09-06和13:58:09将是两个标记),因此自然查询将不起作用。我认为您应该将其转换为毫秒,并使用长字段来提高查询和索引效率。我找到了解决方案。在编制索引之前,我已使用
DateTools.dateToString
将日期(格式:YYYY-MM-DD HH:MM:SS)转换为字符串。搜索时,我在
Long
中搜索日期,然后使用
DateTools.stringToDate
将日期转换回YYYY-MM-DD HH:MM:SS格式。需要知道您是如何为字段编制索引的。不过,我怀疑你也得到了2016年的所有结果,而不仅仅是2016年1月的结果。我强烈建议您看看。基本上,我正在将数据从mqsql移动到lucene。为此,我将我的数据导出到一个可能包含数百万数据的csv中。现在csv中的每一行对我来说都是唯一的记录,由唯一的列标识,第一行是标题。因此,我拿起标题,将其保存在ArrayList中,然后一次读取下1000条记录,处理它以创建索引。我的标题是字段,行中的数据是值。对于每一行,我创建一对标题字段和当前行值。对于处理的每一行,我给它一个唯一的文档Id,它只是每一行中的唯一值。PFA屏幕截图。索引(插入)时此字段的字段类型是什么?例如,如果它是TextField,那么分析器将文本拆分为标记(因此2009-09-06和13:58:09将是两个标记),因此自然查询将不起作用。我认为您应该将其转换为毫秒,并使用长字段来提高查询和索引效率。我找到了解决方案。在编制索引之前,我已使用
DateTools.dateToString
将日期(格式:YYYY-MM-DD HH:MM:SS)转换为字符串。搜索时,我在
Long
中搜索日期,然后使用
DateTools.stringToDate
将日期转换回YYYY-MM-DD HH:MM:SS格式。