搜索分析器
搜索分析器在查询时指定,用于在对文本字段运行全文查询时分析查询字符串。
确定要使用的搜索分析器
为了确定在查询时对查询字符串使用哪个分析器,OpenSearch 按顺序检查以下参数
- 查询的
analyzer
参数 - 字段的
search_analyzer
映射参数 - 索引设置
analysis.analyzer.default_search
- 字段的
analyzer
映射参数 standard
分析器(默认)
在大多数情况下,指定与索引分析器不同的搜索分析器没有必要,并且可能对搜索结果相关性产生负面影响,或者导致意外的搜索结果。
在查询时指定搜索分析器
您可以通过在查询中显式设置分析器来覆盖默认的分析器行为。以下查询使用 english
分析器对输入词元进行词干提取
GET /shakespeare/_search
{
"query": {
"match": {
"text_entry": {
"query": "speak the truth",
"analyzer": "english"
}
}
}
}
在映射中指定搜索分析器
定义映射时,您可以为任何text
字段同时提供 analyzer
(在索引时使用)和 search_analyzer
(在查询时使用)。
示例:用于索引和搜索的不同分析器
以下配置允许在索引和查询时使用不同的分词策略
PUT /testindex
{
"mappings": {
"properties": {
"text_entry": {
"type": "text",
"analyzer": "simple",
"search_analyzer": "whitespace"
}
}
}
}
示例:对索引使用边缘 n-gram 分析器,对搜索使用标准分析器
以下配置启用了类似自动完成的行为,您可以键入单词的开头部分并仍然收到相关的匹配项
PUT /articles
{
"settings": {
"analysis": {
"analyzer": {
"edge_ngram_analyzer": {
"tokenizer": "edge_ngram_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": ["letter", "digit"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "edge_ngram_analyzer",
"search_analyzer": "standard"
}
}
}
}
edge_ngram_analyzer
在索引时应用,将输入字符串分解为部分前缀(n-grams),这使得索引能够存储“se”、“sea”、“sear”等片段。使用以下请求索引文档
PUT /articles/_doc/1
{
"title": "Search Analyzer in Action"
}
使用以下请求在 title
字段中搜索部分单词 sear
POST /articles/_search
{
"query": {
"match": {
"title": "sear"
}
}
}
响应表明,包含“sear”的查询与文档“Search Analyzer in Action”匹配,因为在索引时生成的 n-gram 词元包含该前缀。这反映了自动完成功能,其中键入前缀即可检索完整的匹配项
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "articles",
"_id": "1",
"_score": 0.2876821,
"_source": {
"title": "Search Analyzer in Action"
}
}
]
}
}
为索引设置默认搜索分析器
指定 analysis.analyzer.default_search
以定义所有字段的搜索分析器,除非被覆盖
PUT /testindex
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "simple"
},
"default_search": {
"type": "whitespace"
}
}
}
}
}
此配置可确保多个字段之间行为一致,尤其是在使用自定义分析器时。
有关支持的分析器的更多信息,请参阅分析器。