c# - 在Elasticsearch中执行过滤

标签 c# elasticsearch

我是 Elasticsearch 的新手,我一直在尝试掌握它的工作原理,但不幸的是,到目前为止,它并没有找到明确的教程。

我一直试图实现的是索引一些数据并对它们执行过滤。

我通过将数据作为JSON传递并通过HttpWebRequest发送来为数据建立索引。样本数据如下

{"changeset":"2015-12-01 12:06+05:30","id":"1","registerid":"1"}

现在让我感到困惑的是每个文档字段的数据类型。正如一些数据一样,另一个字符串和另一个int。因此,当我过滤数据时,说我想获取所有变更集日期大于2015-01-01(yyyy-mm-dd)的索引,或者我想获取所有registerid小于100的索引。

由于所有数据均以JSON格式保存,因此我们该如何处理它。

然后,在反复搜索(google)之后,我发现了一个名为“mapping” Ref Link的概念。

那么,是否必须使用映射创建索引来实现过滤功能?

最佳答案

Mapping types确实是要走的路。映射类型允许您定义文档中具有哪些字段以及它们具有什么类型。如果您不提供映射类型,Elasticsearch将尽力推断您的字段及其类型,但是您可能会以其猜测不准确的情况而告终。

常见的最佳做法是始终提供自己的自定义映射,以便您可以确保如何处理数据。

对于上面的示例数据,您可以通过使用 date field,字符串字段和int字段指定映射类型来简单地创建索引:

curl -XPUT localhost:9200/your_index -d '{
    "mappings": {
        "your_type": {
            "properties": {
                "changeset": {
                    "type": "date",
                    "format": "yyyy-MM-dd HH:mmZ"
                },
                "id": {
                    "type": "string"
                },
                "registerid": {
                    "type": "integer"
                },
            }
        }
    }
}'

有了指定的映射类型,Elasticsearch现在将知道如何解释JSON文档中存在的字符串数据。完成此操作后,现在可以轻松创建查询,例如您已表达的两个查询,即:

所有changeset日期大于2015-01-01的文档都可以这样查询:
curl -XPOST localhost:9200/your_index/_your_type/_search -d '{
    "query": {
        "filtered": {
            "filter": {
                "range": {
                    "changeset": {
                        "gt": "2015-01-01"
                    }
                }
            }
        }
    }
}'

所有registerid日期小于100的文档都可以这样查询:
curl -XPOST localhost:9200/your_index/_your_type/_search -d '{
    "query": {
        "filtered": {
            "filter": {
                "range": {
                    "registerid": {
                        "lt": 100
                    }
                }
            }
        }
    }
}'

关于c# - 在Elasticsearch中执行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389444/

相关文章:

c# - klocwork 错误 : No permission set for resource 'streamWriter' before accessing it

python-3.x - Elasticsearch 嗅探失败

ElasticSearch - 按计划从远程重新索引,每天删除源索引

Elasticsearch 升级 2.3.1 Nest 客户端 Raw String

elasticsearch - 在 Elasticsearch 中保护数据

elasticsearch - ElasticSearch按最大日期查询

c# - 模型绑定(bind)表单中的可编辑表字段(Razor Pages)

c# - Datagridview 格式列问题

c# - 在 asp.net MVC 中使用下拉列表进行搜索

c# - 在文本框 C# Winforms 中填充部分背景颜色