search_analyzer编辑

通常,应该在索引时和搜索时应用相同的 分析器,以确保查询中的词语与倒排索引中的词语格式相同。

但是,有时在搜索时使用不同的分析器是有意义的,例如在使用 edge_ngram 分词器进行自动完成或使用搜索时同义词时。

默认情况下,查询将使用字段映射中定义的 analyzer,但可以使用 search_analyzer 设置覆盖它。

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        filter: {
          autocomplete_filter: {
            type: 'edge_ngram',
            min_gram: 1,
            max_gram: 20
          }
        },
        analyzer: {
          autocomplete: {
            type: 'custom',
            tokenizer: 'standard',
            filter: [
              'lowercase',
              'autocomplete_filter'
            ]
          }
        }
      }
    },
    mappings: {
      properties: {
        text: {
          type: 'text',
          analyzer: 'autocomplete',
          search_analyzer: 'standard'
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    text: 'Quick Brown Fox'
  }
)
puts response

response = client.search(
  index: 'my-index-000001',
  body: {
    query: {
      match: {
        text: {
          query: 'Quick Br',
          operator: 'and'
        }
      }
    }
  }
)
puts response
PUT my-index-000001
{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "autocomplete": { 
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "autocomplete", 
        "search_analyzer": "standard" 
      }
    }
  }
}

PUT my-index-000001/_doc/1
{
  "text": "Quick Brown Fox" 
}

GET my-index-000001/_search
{
  "query": {
    "match": {
      "text": {
        "query": "Quick Br", 
        "operator": "and"
      }
    }
  }
}

分析设置以定义自定义 autocomplete 分析器。

text 字段在索引时使用 autocomplete 分析器,但在搜索时使用 standard 分析器。

此字段被索引为以下词语:[ q, qu, qui, quic, quick, b, br, bro, brow, brown, f, fo, fox ]

查询搜索以下两个词语:[ quick, br ]

有关此示例的完整说明,请参阅 索引时搜索即时类型

可以使用 更新映射 API 在现有字段上更新 search_analyzer 设置。请注意,为了执行此操作,需要在更新的字段定义中重复任何现有的“analyzer”设置和“type”。