Solandra缺少日期范围查询的结果

时间:2012-09-29 23:24:16

标签: java solr cassandra solrj solandra

我正在使用Solandra在特定日期之后搜索事件。为此,我从epoch(作为slong数据类型)索引millis并使用范围搜索,如下所示: 开始:[1348992000000 TO *]

很多时候这种方法很好但有时会出现奇怪的错误行为,因此在日期X之后,没有任何东西被带回,但是在日期Y之后(其中X

经过大量的游戏后,我设法提出了一些可以持续复制的东西(至少在我身边)。以下是重新创建的步骤:

1)创建以下架构(如果您需要整个xml文件,请告诉我,我将发布):

<fields>
    <field name="id" type="string" indexed="true" stored="true" required="true" />
    <field name="title" type="text" indexed="true" stored="false"/>
    <field name="start" type="slong" indexed="true" stored="false"/>
</fields>

2)使用SolrJ运行以下Java程序:

public class IndexTest {

    private static final SolrServer eventsServer = new HttpSolrServer("http://localhost:8983/solandra/events");

    public static void main(String... args)
    throws Exception {
        save2(1350028800000L);
        save2(1349424000000L);
        save2(1348992000000L);
        save2(1350028800000L);
        save2(1350115200000L);
        save2(1350374400000L);
        save2(1348992000000L);
        save2(1349424960000L);
        save2(1349424000000L);
        save1(1348992000000L);
        save1(1348999200000L);
        save1(1349431200000L);
        save2(1349164800000L);
        save2(1348992000000L);
        save2(1349424000000L);
        save1(1349444640000L);
        save2(1350633600000L);
    }

    private static void save1(long time)
    throws Exception {
        SolrInputDocument doc = new SolrInputDocument();

        doc.addField("id", "2ce011f0-0a80-11e2-bf94-b8f6b111caaf");
        doc.addField("title", "Test");
        doc.addField("start", time);

        eventsServer.add(doc);
        eventsServer.commit();
    }

    private static void save2(long time)
    throws Exception {
        SolrInputDocument doc = new SolrInputDocument();

        doc.addField("id", "5d9e18f0-0a80-11e2-bf94-b8f6b111caaf");
        doc.addField("title", "Test");
        doc.addField("start", time);

        eventsServer.add(doc);
        eventsServer.commit();
    }

}

3)运行以下查询以查看未返回任何结果:

  • q =开始:[1348992000000 TO *]

    http://localhost:8983/solandra/events/select/?q=start:%5B1348992000000+TO+*%5D
    

4)运行以下查询以查看结果:

  • q =开始:[1349049600177 TO *]

    http://localhost:8983/solandra/events/select/?q=start:%5B1349049600177+TO+*%5D
    

注意事项:

  • 删除commit()似乎修复了这个特定的例子,但是我在其他时候省略了提交时见过它。据我所知,Jake Luciani撰写的文章中,commit()应该没有效果,所以我很困惑为什么这种变化会持续影响结果。

  • 只有当我有多个事件被索引时才会发生这种情况(但无法确定问题似乎是在最随机的时间出现)。

  • 为什么我不使用数据类型日期?我最初做过,但认为特定的数据类型导致此问题如此切换。尝试过数据类型date,long,slong,string和text。所有都表现出相同的零星缺失结果行为。另请注意,切换到不同的数据类型可能会修复一个特定的示例,但在其他示例中会很明显。

  • 直接从github尝试使用Solandra代码作为随时可用的Solandra以及嵌入最新的Cassandra发行版。

这让我发疯,所以非常感谢任何帮助或建议!

0 个答案:

没有答案