org.elasticsearch.index.query.QueryShardException: failed to find geo_point field [geo]錯誤原因


報錯意思是   錯誤的找不到  geo_point 類型, 名字叫做  geo 的字段

先從我創建索引說起。

1:用插件創建個名為  amapaa的索引,里面的 mappings 都是為空的

 2:直接執行新增數據操作,系統會 自動(動態)幫我們執行mapping 對象和es索引之間的關系連接

@Data
@Document(indexName = "amap", type = "_doc", createIndex = false)
public class User {

    @Id
    private Long userId;

    @Field(store = true)
    private String userName;

    @Field(store = true)
    @GeoPointField
    private GeoPoint geo;

    @Field(store = true)
    private String place;


    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", geo='" + geo + '\'' +
                ", place='" + place + '\'' +
                '}';
    }
}

3:但是 geo_point 類型並不會映射正確 ,映射成了float 類型 

4:在查詢的時候就會拋出異常,第一個異常信息有誤導到,還以為分片出現問題。 但是第二個說的就比較清楚了,也是問題的解決關鍵

org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed
	at org.elasticsearch.action.search.AbstractSearchAsyncAction.onPhaseFailure(AbstractSearchAsyncAction.java:293)
	at org.elasticsearch.action.search.AbstractSearchAsyncAction.executeNextPhase(AbstractSearchAsyncAction.java:133)
	at org.elasticsearch.action.search.AbstractSearchAsyncAction.onPhaseDone(AbstractSearchAsyncAction.java:254)
	at org.elasticsearch.action.search.InitialSearchPhase.onShardFailure(InitialSearchPhase.java:101)
	at org.elasticsearch.action.search.InitialSearchPhase.access$100(InitialSearchPhase.java:48)
	at org.elasticsearch.action.search.InitialSearchPhase$2.lambda$onFailure$1(InitialSearchPhase.java:222)
	at org.elasticsearch.action.search.InitialSearchPhase.maybeFork(InitialSearchPhase.java:176)
	at org.elasticsearch.action.search.InitialSearchPhase.access$000(InitialSearchPhase.java:48)
	at org.elasticsearch.action.search.InitialSearchPhase$2.onFailure(InitialSearchPhase.java:222)
	at org.elasticsearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:51)
	at org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler.handleException(SearchTransportService.java:526)
	at org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1068)
	at org.elasticsearch.transport.TransportService$DirectResponseChannel.processException(TransportService.java:1165)
	at org.elasticsearch.transport.TransportService$DirectResponseChannel.sendResponse(TransportService.java:1149)
	at org.elasticsearch.transport.TaskTransportChannel.sendResponse(TaskTransportChannel.java:66)
	at org.elasticsearch.action.search.SearchTransportService$5$1.onFailure(SearchTransportService.java:356)
	at org.elasticsearch.search.SearchService$1.onFailure(SearchService.java:292)
	at org.elasticsearch.search.SearchService$1.onResponse(SearchService.java:286)
	at org.elasticsearch.search.SearchService$1.onResponse(SearchService.java:280)
	at org.elasticsearch.search.SearchService$3.doRun(SearchService.java:1019)
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723)
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
	at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41)
	at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.elasticsearch.index.query.QueryShardException: failed to find geo_point field [geo]
	at org.elasticsearch.index.query.GeoDistanceQueryBuilder.doToQuery(GeoDistanceQueryBuilder.java:244)
	at org.elasticsearch.index.query.AbstractQueryBuilder.toQuery(AbstractQueryBuilder.java:98)
	at org.elasticsearch.index.query.QueryShardContext.lambda$toQuery$2(QueryShardContext.java:305)
	at org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:317)
	at org.elasticsearch.index.query.QueryShardContext.toQuery(QueryShardContext.java:304)
	at org.elasticsearch.search.SearchService.parseSource(SearchService.java:724)
	at org.elasticsearch.search.SearchService.createContext(SearchService.java:575)
	at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:551)
	at org.elasticsearch.search.SearchService.executeDfsPhase(SearchService.java:298)
	at org.elasticsearch.search.SearchService.access$000(SearchService.java:115)
	at org.elasticsearch.search.SearchService$1.onResponse(SearchService.java:284)
	... 9 common frames omitted

 5:刪除掉錯誤的索引,用請求的方式 重新創建,提前指定好  geo 字段為  geo_point 類型

{
    "mappings": {
        "_doc": {
            "properties": {
                "geo": {
                    "type": "geo_point"
                }
            }
        }
    }
}

6: 重新增加一條數據測試,      其他字段動態映射進去, geo_point 類型在我們創建索引提前指定沒有覆蓋。   問題解決

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM