使用Elasticsearch java驱动程序实现等效Elasticsearch titan查询

时间:2014-03-17 06:01:00

标签: elasticsearch titan

我在这里提出了由titan提取的弹性搜索结果中与分页有关的问题

Pagination with Elastic Search in Titan

并得出结论,它现在不支持,所以我决定直接使用ES java客户端搜索Titan索引。

以下是Titan获取ES记录的方式:

Iterable<Result<Vertex>> vertices = g.indexQuery("search","v.testTitle:(mytext)")
        .addParameter(new Parameter("from", 0))
        .addParameter(new Parameter("size", 2)).vertices();    

for (Result<Vertex> result : vertices) {
    Vertex tv = result.getElement();
    System.out.println(tv.getProperty("testTitle")+ ": " + result.getScore());
}

返回1条记录。

但不支持addParameter(),因此不允许使用分页。所以我想直接从ES java客户端做同样的事情,如下所示:

Node node = nodeBuilder().node();
Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));

        SearchResponse response = client.prepareSearch("titan")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.fieldQuery("testTitle", "mytext"))             // Query
        .execute()
        .actionGet();
        System.out.println(response.getHits().totalHits());
        node.close(); 

在我的情况下它的打印为零。但是Titan代码(上面)中的相同查询返回1条记录。我在这个ES java代码中错过了一些Titan特定参数或选项

1 个答案:

答案 0 :(得分:0)

我认为Titan正在发送QueryStringQuery。 也就是说,我建议使用MatchQuery。

QueryBuilders.matchQuery("offerTitle", "your text whatever you want")