Elasticsearch 为可以是法语或英语的字段配置词干提取

Elasticsearch configure stemming for fields that can be french or english

我有一个 Fr/En 网站,我有一个 "profile" 模型,其中的信息可以用英语或法语(我不知道是哪个)编写。考虑 Mongoid

上的一个简单模型
class Profile
  field :job_name
  field :company_name
end

我想要对支持词干提取的作业名称进行智能搜索。所以基本上我想要那个领域的英语+法语分析器

我相信我已经为索引部分找到了一些东西,我在其中用两种语言分析了该字段:

mapping do
  indexes :job_name, type: :string, fields: {
    french: { type: :string, analyzer: 'french' },
    english: { type: :string, analyzer: 'english' }
  }
end

我在配置搜索词干时遇到问题。我其实不是。我的默认搜索引擎使用多重匹配和每个字段提升,我真的不明白如何在此之上指定分析器:

query: {
  filtered: {
    query: {
      multi_match: {
        query: query,
        fields: [
          "company_name^3",
          "job_name^2",
        ],
        type: "best_fields",
        tie_breaker: 0.3
      }
    }
  }
}

理想情况下,当搜索 "achat"(法语购买)时,引擎应该 return 结果,其中工作名称包含

它应该也适用于类似的英文单词

编辑:我的 ES 索引("no" 正常吗?)

{
  "mydb": {
    "aliases": {},
    "mappings": {
      "profile": {
        "properties": {
          "company_name": {
            "type": "string"
          }
          "job_name": {
            "type": "string",
            "index": "no",
            "fields": {
              "english": {
                "type": "string",
                "analyzer": "english"
              },
              "french": {
                "type": "string",
                "analyzer": "french"
              }
            }
          }
        }
      },
    "settings": {
      "index": {
        "creation_date": "1469789941429",
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "uuid": "HHN-rWTTStCXDgQtJMTEPg",
        "version": {
          "created": "2030499"
        }
      }
    },
    "warmers": {}
  }
}

您可以对字段名称使用通配符版本,multi_match 将为此使用每个子字段的分析器:

      "fields": [
        "job_name.*^2"
      ],