【转】elasticsearch 基础 —— URI搜索

本文深入探讨了Elasticsearch的两种搜索API形式:轻量级查询字符串搜索和全面的请求体搜索,后者支持JSON格式和更丰富的查询表达式。通过实例展示了如何使用URI执行搜索请求,包括查询字符串参数的详细说明,如q、df、analyzer等,以及响应结果的解析。

大神地址:https://blog.youkuaiyun.com/ctwy291314/article/details/82744548

有两种形式的 搜索 API:一种是 “轻量的” 查询字符串 版本,要求在查询字符串中传递所有的 参数,另一种是更完整的 请求体 版本,要求使用 JSON 格式和更丰富的查询表达式作为搜索语言。

查询字符串搜索非常适用于通过命令行做即席查询。例如,查询在 tweet 类型中 tweet 字段包含 elasticsearch 单词的所有文档:

curl -X GET "localhost:9200/_all/tweet/_search?q=tweet:elasticsearch"

URI搜索

  可以通过提供请求参数使用URI来执行搜索请求。使用此模式执行搜索时,并非所有搜索选项都会暴露。这是一个例子:

GET twitter/_search?q=user:kimchy

示例响应:

{
    "timed_out": false,
    "took": 62,
    "_shards":{
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
    },
    "hits":{
        "total" : 1,
        "max_score": 1.3862944,
        "hits" : [
            {
                "_index" : "twitter",
                "_type" : "_doc",
                "_id" : "0",
                "_score": 1.3862944,
                "_source" : {
                    "user" : "kimchy",
                    "date" : "2009-11-15T14:12:12",
                    "message" : "trying out Elasticsearch",
                    "likes": 0
                }
            }
        ]
    }
}

参数

URI中允许的参数是:

名称描述
q查询字符串(映射到query_string查询,有关详细信息,请参阅 查询字符串查询)。
df在查询中未定义字段前缀时使用的默认字段。
analyzer分析查询字符串时要使用的分析器名称。
analyze_wildcard是否应分析通配符和前缀查询。默认为false。
batched_reduce_size应在协调节点上一次减少的分片结果数。如果请求中潜在的分片数量很大,则应将此值用作保护机制,以减少每个搜索请求的内存开销。
default_operator要使用的默认运算符可以是AND或 OR。默认为OR。
lenient如果设置为true将导致忽略基于格式的失败(如向数字字段提供文本)。默认为false。
explain对于每个命中,包含如何计算命中得分的解释。
_source设置为false禁用_source字段检索。您还可以使用_source_include&检索部分文档_source_exclude( 有关详细信息,请参阅请求正文文档)
stored_fields每个匹配返回的文档的选择性存储字段,逗号分隔。不指定任何值将导致没有字段返回。
sort排序执行。可以是fieldName或 fieldName:asc/ 的形式fieldName:desc。fieldName可以是文档中的实际字段,也可以是特殊_score名称,表示基于分数的排序。可以有几个sort参数(顺序很重要)。
track_scores排序时,设置为true仍然跟踪分数并将其作为每次命中文档的一部分返回。
track_total_hits设置为false禁用跟踪与查询匹配的匹配总数。(有关详细信息,请参阅索引排序)。默认为true。
timeout搜索超时,将搜索请求限制在指定的时间值内执行,并使用在到期时累积的命中文档数进行保释。默认为无超时。
terminate_after在达到查询执行将提前终止时,为每个分片收集的最大文档数。如果设置,则响应将具有一个布尔字段,terminated_early以指示查询执行是否实际上已终止。默认为no terminate_after。
from从命中的索引开始返回。默认为0。
size要返回的命中的文档个数。默认为10。
search_type要执行的搜索操作的类型。可以是 dfs_query_then_fetch或query_then_fetch。默认为query_then_fetch。有关可以执行的不同搜索类型的更多详细信息,请参阅 搜索类型。
allow_partial_search_resultsfalse如果请求将产生部分结果,则设置为返回整体故障。默认为true,这将允许在超时或部分失败的情况下获得部分结果。
### 使用 Elasticsearch 的 .NET 客户端 Elasticsearch 是一种分布式搜索引擎,支持全文搜索和分析功能。为了在 .NET 应用程序中集成 Elasticsearch,可以使用官方提供的客户端库——Nest 和 Elastic.Search[^4]。 以下是关于如何安装、配置以及基本使用的说明: #### 1. 安装 Elasticsearch.NET 和 Nest 可以通过 NuGet 包管理器来安装这两个主要的客户端库: ```bash Install-Package Nest Install-Package Elasticsearch.Net ``` `Elasticsearch.Net` 提供了一个低级别的 REST API 访问接口,而 `Nest` 则是一个高级别的对象映射工具,能够简化查询构建过程并提供更强类型的体验[^4]。 #### 2. 配置连接设置 创建一个简单的连接实例通常涉及定义目标节点地址和其他必要的选项。下面展示了一种典型的初始化方式: ```csharp var node = new Uri("http://localhost:9200"); var settings = new ConnectionSettings(node); // 可选:启用调试日志记录 settings.EnableDebugMode(); var client = new ElasticClient(settings); ``` 上述代码片段展示了如何通过指定 URI 来建立到本地运行的 Elasticsearch 实例的连接,并启用了调试模式以便于开发阶段排查问题[^5]。 #### 3. 创建索引与文档操作 利用 `client.Index()` 方法向数据库写入数据;同样也可以执行批量插入等复杂任务。 ```csharp var person = new Person { Id = 1, Name = "John Doe", Age = 30 }; var indexResponse = client.IndexDocument(person); if (indexResponse.IsValid) { Console.WriteLine($"Indexed document with ID: {person.Id}"); } else { Console.WriteLine(indexResponse.DebugInformation); } ``` 这里假设有一个名为 `Person` 的类作为模型结构用于表示存储的对象[^6]。 #### 4. 查询数据 检索已存入的数据可通过多种灵活的方式实现,比如匹配特定字段值或者组合条件过滤等等。 ```csharp var searchResponse = client.Search<Person>(s => s .Query(q => q.Match(m => m.Field(f => f.Name).Query("john")))) ); foreach(var hit in searchResponse.Hits) { var result = hit.Source; Console.WriteLine($"{result.Name} ({result.Age}) was found."); } ``` 这段示例演示了基于名字部分匹配查找用户的逻辑[^7]。 --- 尽管当前讨论未直接提及 Kafka Connect 或 Snowflake Connector[^1]相关内容,但值得注意的是,在实际项目场景下这些技术可能共同协作完成更复杂的业务需求处理流程。例如先由 Kafka 收集实时消息流再经由自定义换规则送至 ES 进行高效检索服务就是常见架构之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值