IndexNotFoundException [没有这样的索引]

时间:2016-01-31 11:56:59

标签: java eclipse elasticsearch

我正在运行我的第一个弹性搜索测试用例,我使用Java作为解决方案视角来进行弹性搜索实验。它在eclipse调试模式下完美运行,

调试模式结果:

{postDate=2016-01-31T10:32:58.952Z, title=Posting, content=today's weather is hot, tags=[hashtag]}

但是当我在正常运行应用程序模式下尝试此操作时,我收到以下异常,我根本不知道。请指导我。

以下例外:

8253 [main] INFO  org.elasticsearch.node  - [Marc Spector] started
8257 [elasticsearch[Marc Spector][clusterService#updateTask][T#1]] DEBUG org.elasticsearch.index.store  - [Marc Spector] [facebook] using index.store.throttle.type [none], with index.store.throttle.max_bytes_per_sec [0b]
8273 [elasticsearch[Marc Spector][search][T#4]] DEBUG org.elasticsearch.action.search.type  - [Marc Spector] All shards failed for phase: [query]
RemoteTransportException[[Marc Spector][127.0.0.1:9300][indices:data/read/search[phase/query]]]; nested: IndexNotFoundException[no such index];
Caused by: [facebook] IndexNotFoundException[no such index]
    at org.elasticsearch.indices.IndicesService.indexServiceSafe(IndicesService.java:310)
    at org.elasticsearch.search.SearchService.createContext(SearchService.java:635)
    at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:617)
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:368)
    at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:368)
    at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:365)
    at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:350)
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception in thread "main" Failed to execute phase [query], all shards failed
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:228)
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$1.onFailure(TransportSearchTypeAction.java:174)
    at org.elasticsearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:46)
    at org.elasticsearch.transport.TransportService$DirectResponseChannel.processException(TransportService.java:821)
    at org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:799)
    at org.elasticsearch.transport.TransportService$4.onFailure(TransportService.java:361)
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:42)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
8278 [elasticsearch[Marc Spector][clusterService#updateTask][T#1]] DEBUG org.elasticsearch.index.mapper  - [Marc Spector] [facebook] using dynamic[true]

我认为显示源代码可以更明确地解决问题

来源:

Node node = nodeBuilder().clusterName("testing2").node(); 
        Client client = node.client();

SearchResponse response = client.prepareSearch("facebook")
                .setTypes("Lance")
                .setSearchType(SearchType.QUERY_THEN_FETCH)
                .setQuery(QueryBuilders.matchPhrasePrefixQuery("title", "Pos"))
                .setFrom(0).setSize(60).setExplain(true)
                .execute()
                .actionGet();

        SearchHit[] searchResponse = response.getHits().getHits();

        for(SearchHit hit : searchResponse){
            System.out.println(hit.getSource());
        }

1 个答案:

答案 0 :(得分:4)

在查询你的facebook索引之前,你需要先创建它:

Settings indexSettings = ImmutableSettings.settingsBuilder()
                 .put("number_of_shards", 5)
                 .put("number_of_replicas", 1)
                 .build();
CreateIndexRequest indexRequest = new CreateIndexRequest("facebook", indexSettings);
client.admin().indices().create(indexRequest).actionGet();

如果您希望找到一些结果,您还需要索引数据:

IndexResponse response = client.prepareIndex("facebook", "Lance", "1")
        .setSource(jsonBuilder()
                    .startObject()
                        .field("title", "Posting")
                        .field("postDate", new Date())
                        .field("content", "today's weather is hot")
                        .field("tags", Lists.newArrayList("hashtag"))
                    .endObject()
                  )
        .execute()
        .actionGet();

然后你可以搜索索引。

希望这个帮助