弹性搜索和Twitter数据示例

时间:2016-08-28 06:44:58

标签: elasticsearch twitter

我正在学习弹性搜索,我正在关注the next tutorial。在该教程中,它使用Twiter的推文作为示例数据。方法tweetJsonList返回一个示例数据。我试图将其保存在索引" tweets_juan"并输入" tweet"。应用程序运行没有问题,但当我使用(http://localhost:9200/tweets_juan/tweet/_search?q= )搜索所有文档时,我没有找到任何内容。你能帮我解决一下这里发生什么事吗?

public class App 
{
@SuppressWarnings("unchecked")
public static void main( String[] args ) throws TwitterException, UnknownHostException
{
    System.out.println( "Hello World!" );
    List<String> tweetJsonList = searchForTweets();

    Client client = TransportClient.builder().build()
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
    String index = "tweets_juan";
    client.admin().indices()
                    .create(new CreateIndexRequest(index))
                    .actionGet();
    save(client, tweetJsonList, index);
    searchExample(client);
}

public static void save(Client client, List<String> tweetJsonList, String index) {

    BulkRequestBuilder bulkRequestBuilder = client.prepareBulk().setRefresh(true);
    for (String data :  tweetJsonList) {
        String indexName = index;
        String typeName = "tweet";

        String json = new Gson().toJson(data);
        System.out.println("Juan Debug:" + data);
        bulkRequestBuilder.add(client.prepareIndex(indexName, typeName).setSource(json));
    }
    bulkRequestBuilder.execute().actionGet();
}


public static void searchExample(Client client) {
    BoolQueryBuilder queryBuilder = QueryBuilders
            .boolQuery()
            .must(termsQuery("text", "Baloncesto"));

    SearchResponse searchResponse = client.prepareSearch("tweets_juan")
            .setQuery(queryBuilder)
            .setSize(25)
            .execute()
            .actionGet();
     }

public static List searchForTweets() throws TwitterException {
    Twitter twitter = new TwitterFactory().getInstance();
    Query query = new Query("mundial baloncesto");
    List tweetList = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        QueryResult queryResult = twitter.search(query);
        tweetList.addAll(queryResult.getTweets());
        if (!queryResult.hasNext()) {
            break;
        }
        query = queryResult.nextQuery();
    }
    Gson gson = new Gson();

    return (List)    tweetList.stream().map(gson::toJson).collect(Collectors.toList());
}
}

1 个答案:

答案 0 :(得分:0)

在任何人回答您的问题之前,您需要提供更多信息。

由于您没有使用任何显式映射,因此默认情况下必须对字段进行分析。因此,您的文本字段将被标记为多个术语。

  1. 使用“全部匹配”查询来查看已编制索引的数据。
  2. 术语查询用于完全匹配(包括确切的大小写),并且您尝试在分析的字段“text”上运行术语查询,这将无效。
  3. 尝试在文本字段中使用匹配或匹配词组查询,看看是否有任何结果。