2012-09-06 99 views
1

我已经使用elasticsearch实现了轮胎。 本地我的项目运行良好,我没有问题搜索我的索引。 但是当我部署我的应用程序到我的服务器我得到这个错误信息:轮胎和Elasticsearch SearchRequestFailed SearchPhaseExecutionException

轮胎::搜索:: SearchRequestFailed(500:{“错误”:“SearchPhaseExecutionException [未能执行阶段[query_fetch],完全失效; shardFailures {[hDTlT_K_Sl6P5regwKNJyg] [articles] [0]:QueryPhaseExecutionException [[articles] [0]:query [ConstantScore(NotDeleted(cache(_type:article)))],from [0],size [25],sort [!] :查询失败[无法执行主查询]];嵌套:IOException [无法对每个文档具有多个值的字符串类型排序,或者每个字段具有多个标记];}]“,”status“:500} ):

我相信我的文章存储在我的索引中,因为我没有收到创建它们的任何错误。我还试图与该手动运行相同的查询:

curl -XPOST 'http://localhost:9200/articles/article/_search' -d '{ 
    "sort": [ 
     { 
      "supplier_code": "desc" 
     } 
    ] 
}' 

而且我得到几乎相同的响应:

{“错误”:“SearchPhaseExecutionException [未能执行相位[query_fetch],总故障; shardFailures {[hDTlT_K_Sl6P5regwKNJyg] [articles] [0]:QueryPhaseExecutionException [[articles] [0]:query [ConstantScore(NotDeleted(cache(_type:article)))],from [0],size [10],sort [! ]:查询失败[无法执行主查询]];嵌套:IOException [无法对每个文档具有多个值的字符串类型排序,或者每个字段具有多个标记];}]“,”status“:500 }

所以有人可以指出我正确的方向吗? 我复制了我在本地机器上使用的确切sam配置。 很奇怪,它不适用于服务器。

缺少什么我在这里?

感谢很多提前

编辑:

我发现我试图执行排序导致了问题。 另外,这与我的文章对象到弹性搜索的映射有关。

东西与领域我想排序放在not_analyzed我是我正确? 如果我只映射一个字段,是否需要显式映射所有字段?

回答

2

这是实际问题:无法对字符串类型排序,每个文档具有多个值或每个字段有多个标记。这意味着以下两种情况之一:要么每个文档有多个supplier_code字段,要么通过分析器分析字段supplier_code生成多个标记(默认分析程序会为某些字符串执行此操作)。 Elasticsearch只能对每个记录不超过一个值的字段进行排序。所以,如果你有多个领域,你需要想出另一个排序键,或者如果你有一个领域,你需要使它不被分析,或使用一些不产生多个令牌的其他分析器。

+0

感谢您的解释,我可以使用什么样的分析器,以便我可以使用该字段进行搜索和排序? 此外,如果我添加一些映射,我需要明确地映射我的模型的所有我的领域? – Niels

+0

这取决于您的搜索用例。任何产生不超过一个标记的分析仪都可以。如果您的用例需要将字段的内容分割为多个标记,则可以使用[多字段](http://www.elasticsearch.org/guide/reference/mapping/multi-field-type.html)为字段两次。您只能映射一个字段,而使所有其他字段保持动态。但是,如果字段已动态映射,则需要重新创建索引。 – imotov

相关问题