OpenSearch 有不同类型的查询,包括:
Function score
queries没有参数执行搜索 API ,会提供来自索引的结果, 而不进行过滤。当没有提供filter时,每个文档都是搜索结果的一部分:
GET /my-movie-index/_search
刚刚检索到的索引数据存储在组成索引的shard中,并在以下两个阶段检索:
OpenSearch 支持简单的基于 URL 的查询语法以及更复杂的基于 REST 的 JSON 接口。当使用 OpenSearch 时,最常使用 JSON API。
运行以下基于 URL 的查询来执行一个简单的搜索,并使用一个查询参数:
GET /my-movie-index/_search?q=:param{key=query.general.query}
GET /my-movie-index/_search?q=franco
查看响应。返回的数据包含操作信息和结果集:
{
"took" : 11, // 服务器端执行时间(毫秒)
"timed_out" : false, // 如果查询操作超时
"_shards" : {
"total" : 3, // 正在查询的索引中的总分片数
"successful" : 3, // 成功响应查询的分片数
"skipped" : 0, // 跳过的分片数
"failed" : 0 // 搜索失败的分片数
},
"hits" : {
"total" : {
"value" : 13, // 找到的相关文档数
"relation" : "eq" // 搜索关系,默认操作 eq
}
}
}
Term查询返回与搜索词完全匹配的文档。检查输出,并检查是否所有返回的文档都包含关键字
GET my-movie-index/_search
{
"query": {
"term": {
"directors.keyword": {
"value": "James Franco"
}
}
}
}
OpenSearch 拥有丰富的查询接口,支持多种不同的查询类型。
keyword
字段一起使用。text
字段一起使用。那么 keyword
和 text
字段有什么区别呢?
OpenSearch 会对 [text] 字段中的字符串进行处理,这个过程称为 分析(Analysis)
。在分析过程中,OpenSearch 会 分段(segment) 文本,提取出单独的 term。可以将词条视为由空白字符分隔的单词,尽管一些语言(如日语)的分段更加复杂,需要考虑上下文。OpenSearch 还会进一步处理这些词条,删除常见的 停用词,将单词还原为词干形式,添加同义词,转换为小写等。
Keyword
字段提供了一个单一的词条用于匹配。OpenSearch 不会对 keyword
字段应用文本转换。
standard
分析器将:
运行以下查询:
GET my-movie-index/_search
{
"query": {
"term": {
"title": "transformers"
}
}
}
文本在索引过程中被转换为小写。请注意上述查询返回的值 Transformers
。
可以使用 _analyze
API 查看 OpenSearch 如何转换输入文本:
GET my-movie-index/_analyze
{
"analyzer": "default",
"text": ["Transformers"]
}
对于不区分大小写的搜索,可以使用 simple_query_string
操作。simple_query_string
属于match
查询。
POST my-movie-index/_search
{
"query": {
"simple_query_string": {
"query": "Transformers",
"fields": ["title"]
}
}
}