【发布时间】:2017-10-10 02:16:39
【问题描述】:
我是 Elasticsearch 的新手。我尝试使用 CData Elasticsearch ODBC 驱动程序从 ES 获取结果。是否可以获得分数字段的总和?
我的代码:
OdbcConnection connection = new OdbcConnection("Driver={CData ODBC Driver for Elasticsearch};server=localhost");
connection.Open();
string query = "select sum(_score) from ordersdetails";
OdbcCommand odbcCommand = new OdbcCommand(query, connection);
OdbcDataReader dataReader = odbcCommand.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(dataReader);
connection.Close();
我遇到了以下异常
System.Data.Odbc.OdbcException: 'ERROR [HY000] '_score' 列不适用于 sum 函数。'
但是下面的查询返回结果:
"select _id, sum(_score) from ordersdetails group by _id"
任何人都知道,为什么我在尝试获取单个列的结果时出现异常?
如果你知道解决方案,请与我分享。
【问题讨论】:
-
请告诉我 sum 查询是否适用于其他数字字段?您是否意识到
_score是一个"virtual" field,它是针对每对(查询、结果)计算的? -
@NikolayVasiliev:是的。 sum 查询适用于其他数字字段。实际上,我的用例是通过 Tableau、Power BI 等应用程序中的 ODBC 驱动程序获取 ElasticSearch 数据。我对 Elasticsearch 了解不多。所以我使用 C# 代码将数据插入到 elasticsearch 中。请告诉我们,有没有可能使用 sql 查询得到分值的总和?
-
@NikolayVasiliev:您能否提供一个使用 _score 字段的示例?
-
感谢您的回复。
_score字段是文档与所触发查询的相关性得分。例如,如果您使用tweetText=google之类的查询对一组推文进行全文搜索,ElasticSearch 将按相关性顺序返回结果,_score将包含用于对结果进行排序的实际值。这就是为什么对我来说问题中的用例没有意义——没有查询,这样的sum并没有提供太多信息。您能否提供对_score求和的用例? -
@NikolayVasiliev:非常感谢。
标签: elasticsearch odbc nest cdata cdata-drivers