首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NEST排序时出错(未知字段ignore_unmapped)

使用NEST排序时出错(未知字段ignore_unmapped)
EN

Stack Overflow用户
提问于 2020-10-18 21:06:03
回答 1查看 1.2K关注 0票数 0

使用NEST排序时,我会得到这个错误(field_sort未知字段ignore_unmapped)。原因就在这个地方,如果你评论的话,一切都很好。请帮我理解这个问题。

代码语言:javascript
复制
internal static void SortBy(string sortColumn, string sortType, SearchDescriptor<BaseIndexerObject> searchDescriptor)

        {
            Action<string, string, SearchDescriptor<BaseIndexerObject>> algorithm;
            bool algorithmExists = sortAlgorithms.TryGetValue(sortColumn, out algorithm);
            if (algorithmExists)
            {
                algorithm(sortColumn, sortType, searchDescriptor);
                return;
            }

            searchDescriptor.Sort(sortFieldDescriptor =>
            {
                if (sortType == "asc")
                {
                    sortFieldDescriptor.Ascending(asc => sortColumn);
                }
                else
                {
                    sortFieldDescriptor.Descending(desc => sortColumn);
                }

                ParameterExpression param = Expression.Parameter(typeof(BaseIndexerObject), "x");
                Expression<Func<BaseIndexerObject, object>> lambda =
                    Expression.Lambda<Func<BaseIndexerObject, object>>(
                        Expression.Convert(Expression.PropertyOrField(param, sortColumn), typeof(object)), param);

                sortFieldDescriptor.Field(f => f.Field(lambda).IgnoreUnmappedFields());

                return sortFieldDescriptor;
            });
        }

生成的请求和错误响应

代码语言:javascript
复制
POST http://XXX.XXX.XX.XXX:9200/object_folder666_%2A%2Cobject_folder777_%2A/_search?pretty=true&error_trace=true&typed_keys=true HTTP/1.1
Accept: application/json
Content-Type: application/json
User-Agent: elasticsearch-net/7.9.0+54ddce9e1b7e7f755e185f4f6431948fee95e1b9 (Microsoft Windows 10.0.18363; .NET Framework 4.8.4250.0; Nest)
Host: XXX.XXX.XX.XXX:9200
Content-Length: 828

{"from":0,"highlight":{"encoder":"html","fields":{"*":{}},"post_tags":["</mark>"],"pre_tags":["<mark>"]},"query":{"bool":{"must":[{"bool":{"must":[{"bool":{"filter":[{"query_string":{"default_operator":"and","query":"*"}}]}},{"range":{"74":{"gte":0.0,"lte":2147483647.0}}},{"match_all":{}},{"match_all":{}}],"must_not":[{"term":{"79":{"value":300}}},{"bool":{"must":[{"term":{"79":{"value":257}}}],"must_not":[{"term":{"4239":{"value":0}}}]}}]}},{"bool":{"should":[{"bool":{"must":[{"match_all":{}},{"match_all":{}}]}},{"nested":{"path":"12416","query":{"bool":{"must":[{"match_all":{}},{"match_all":{}}]}}}}]}},{"match_all":{}},{"match_all":{}},{"match_all":{}},{"match_all":{}},{"terms":{"833":[-1]}},{"match_all":{}}]}},"size":5,"sort":[{"sortColumn":{"order":"desc"}},{"TimeReal":{"ignore_unmapped":true}}],"timeout":"360s"}


HTTP/1.1 400 Bad Request
content-type: application/json; charset=UTF-8
content-length: 14644

{
  "error" : {
    "root_cause" : [
      {
        "type" : "x_content_parse_exception",
        "reason" : "[1:786] [field_sort] unknown field [ignore_unmapped]",
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* "stack_trace" : "[[1:786] [field_sort] unknown field [ignore_unmapped]]; nested: XContentParseException[[1:786] [field_sort] unknown field [ignore_unmapped]];\n\tat org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:644)\n\tat org.elasticsearch.ElasticsearchException.generateFailureXContent(ElasticsearchException.java:572)\n\tat org.elasticsearch.rest.BytesRestResponse.build(BytesRestResponse.java:149)\n\tat org.elasticsearch.rest.BytesRestResponse.<init>(BytesRestResponse.java:110)\n\tat org.elasticsearch.rest.BytesRestResponse.<init>(BytesRestResponse.java:93)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:238)\n\tat org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:318)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:176)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:318)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:372)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:308)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:42)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:28)\n\tat io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:58)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:615)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:578)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:832)\nCaused by: org.elasticsearch.common.xcontent.XContentParseException: [1:786] [field_sort] unknown field [ignore_unmapped]\n\tat org.elasticsearch.common.xcontent.ObjectParser.lambda$errorOnUnknown$2(ObjectParser.java:102)\n\tat org.elasticsearch.common.xcontent.ObjectParser.parse(ObjectParser.java:297)\n\tat org.elasticsearch.search.sort.FieldSortBuilder.fromXContent(FieldSortBuilder.java:690)\n\tat org.elasticsearch.search.sort.SortBuilder.parseCompoundSortField(SortBuilder.java:148)\n\tat org.elasticsearch.search.sort.SortBuilder.fromXContent(SortBuilder.java:106)\n\tat org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1170)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.parseSearchRequest(RestSearchAction.java:137)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.lambda$prepareRequest$1(RestSearchAction.java:113)\n\tat org.elasticsearch.rest.RestRequest.withContentOrSourceParamParserOrNull(RestRequest.java:470)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.prepareRequest(RestSearchAction.java:112)\n\tat org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:94)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.handleRequest(SecurityRestFilter.java:81)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:236)\n\t... 53 more\n"
*/
      }
    ],
    "type" : "x_content_parse_exception",
    "reason" : "[1:786] [field_sort] unknown field [ignore_unmapped]",
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* "stack_trace" : "org.elasticsearch.common.xcontent.XContentParseException: [1:786] [field_sort] unknown field [ignore_unmapped]\n\tat org.elasticsearch.common.xcontent.ObjectParser.lambda$errorOnUnknown$2(ObjectParser.java:102)\n\tat org.elasticsearch.common.xcontent.ObjectParser.parse(ObjectParser.java:297)\n\tat org.elasticsearch.search.sort.FieldSortBuilder.fromXContent(FieldSortBuilder.java:690)\n\tat org.elasticsearch.search.sort.SortBuilder.parseCompoundSortField(SortBuilder.java:148)\n\tat org.elasticsearch.search.sort.SortBuilder.fromXContent(SortBuilder.java:106)\n\tat org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1170)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.parseSearchRequest(RestSearchAction.java:137)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.lambda$prepareRequest$1(RestSearchAction.java:113)\n\tat org.elasticsearch.rest.RestRequest.withContentOrSourceParamParserOrNull(RestRequest.java:470)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.prepareRequest(RestSearchAction.java:112)\n\tat org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:94)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.handleRequest(SecurityRestFilter.java:81)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:236)\n\tat org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:318)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:176)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:318)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:372)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:308)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:42)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:28)\n\tat io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:58)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:615)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:578)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:832)\n"
*/
  },
  "status" : 400
}

在RFC2616下,无论缓存头是什么,HTTP/400响应都不会被缓存。此响应没有指定显式的HTTP缓存生存期信息,也没有指定最后修改的日期。启发式过期通常基于最后修改的日期。由于缺少“最后修改”,此响应可能在每次使用或每次浏览会话中重新验证一次,具体取决于浏览器配置。

此响应既不包含ETAG,也不包含最后修改的时间.这将防止对此响应进行有条件的重新验证。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 00:23:13

我还不完全清楚查询的目的是什么,但是ignore_unmapped看起来只支持地距排序

与其他字段排序,属性可以使用。我想你是在找下面这样的东西

代码语言:javascript
复制
private static void Main()
{
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

    var defaultIndex = "posts";
    var settings = new ConnectionSettings(pool)
        .DefaultIndex(defaultIndex);
        
    var client = new ElasticClient(settings);

    var sortType = "asc";
    var sortColumn = "TimeReal";

    var response = client.Search<Post>(s => s
        .Sort(sortFieldDescriptor =>
            {
                // TODO: probably cache/source generate the mapping of PropertyInfo -> FieldType
                var property = typeof(BaseIndexerObject).GetProperty(sortColumn);
                FieldType? unmappedType = null;
                
                switch (property.PropertyType.FullName)
                {
                    case "System.Int32":
                        unmappedType = FieldType.Integer;
                        break;
                    // TODO: fill in other relevant Type -> FieldType mappings
                }
                
                sortFieldDescriptor.Field(f => f
                    .Field(sortColumn)
                    .UnmappedType(unmappedType)
                    .Order(sortType == "asc" ? SortOrder.Ascending : SortOrder.Descending)
                );

                return sortFieldDescriptor;
            })
    );
}

public class BaseIndexerObject
{
    public int TimeReal { get; set; }
}

生成查询的

代码语言:javascript
复制
POST http://localhost:9200/posts/_search?pretty=true&typed_keys=true 
{
  "sort": [
    {
      "TimeReal": {
        "unmapped_type": "integer",
        "order": "asc"
      }
    }
  ]
}

(顺便说一句,我想看看用于生成查询的代码。生成的大量多余的match_all查询将不必要地使服务器上的查询解析复杂化)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64418329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档