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

时间:2016-07-29 00:08:41

标签: ruby-on-rails elasticsearch elasticsearch-2.0

我有一个Fr / En网站,我有一个"个人资料"模型,信息可以用英语或法语写成(我不知道哪一个)。考虑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" (购买法语),引擎应返回作业名称包含的结果

  • " gestionnaire d' achat" (参见" d'"前缀),
  • " achats en gros" (见复数)。

它也适用于类似的英语单词

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

{
  "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": {}
  }
}

1 个答案:

答案 0 :(得分:1)

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

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