弹性搜索语言配置

时间:2017-06-05 13:01:55

标签: symfony elasticsearch sonata-admin foselasticabundle

我使用symfony和sonata admin处理项目, 我的项目将使用两种语言:fr和de所以我使用弹性搜索,所以我安装了“friendsofsymfony / elastica-bundle”:“3.2.1”。 在弹性配置文件中如何添加语言配置? 这是我的fos弹性包配置文件:

fos_elastica:
    clients:
        default: { host: %elastic_host%, port: %elastic_port% }
    indexes:
        myproject:
            settings:
                index:
                    analysis:
                       analyzer:
                           custom_analyzer :
                               type     :    custom
                               tokenizer:    nGram
                               filter   :    [stopwords, asciifolding ,lowercase, elision, worddelimiter]
                           custom_search_analyzer :
                               type     :    custom
                               tokenizer:    standard
                               filter   :    [stopwords, asciifolding ,lowercase, elision, worddelimiter]
                       tokenizer:
                           nGram:
                               type:     nGram
                               min_gram: 3
                               max_gram: 20
                       filter:
                           elision:
                               type:     elision
                               articles: [l, m, t, qu, n, s, j, d]
                           stopwords:
                               type:      stop
                               stopwords: [_french_]
                               ignore_case : true
                           worddelimiter:
                               type:      word_delimiter

            types:
                produit:
                    mappings:
                        titre: ~
                        active:
                            type: boolean
                        descriptifTexteOriginal:
                            index_analyzer: custom_analyzer
                            search_analyzer : custom_search_analyzer
                            type: string
                            norms: { enabled: false }
                            explain: true
                            index_options: freqs

                    persistence:
                        driver: orm
                        model: myproject\BOBundle\Entity\Produit
                        finder: ~
                        provider: ~
                        listener: ~

1 个答案:

答案 0 :(得分:1)

在基地,我们将约两个situtaion。首先是你有一个领域,它可以存储 两种或更多种不同的语言文本。例如,您有一个可以的标题字段 存储英语或土耳其语。并非他们两个都在同一时间。第二种情况 是的,您的数据在一个文档中具有多个语言值。

在我看来,这个问题也存在两种方式。首先是将你的领域分开 第二是分离指数。让我们向你解释一下:

考虑一下您在电子商务网站上的产品有以下数据:

id => identify of your data
name => name of the product
price => price of the product

我们的第一个意见有多种选择。现在,让我们看看第一个选择 意见并创建一个映射:

PUT 44369578
{
  "mappings": {
    "product": {
      "properties": {
        "id": { "type": "integer" },
        "name": {
          "type": "text",
          "fields": {
            "en": {
              "type": "text",
              "analyzer": "englishAnalyzer"
            },
            "tr": {
              "type": "text",
              "analyzer": "turkishAnalyzer"
            }
          }
        },
        "price": { "type": "double"}
      }
    }
  }
}

有一个名称字段,可以采取英语或土耳其价值 在这个领域只能处理其中一个。不是他们两个 当您尝试改进语言支持时,也应该更改映射。

然后,让我们看看第一个意见的第二个选项。

PUT 44369578
{
  "mappings": {
    "product": {
      "properties": {
        "id": { "type": "integer" },
        "name_en": {"type": "text", "analyzer": "englishAnalyzer" },
        "name_tr": {"type": "text", "analyzer": "turkishAnalyzer" },
        "price": { "type": "double"}
      }
    }
  }
}

在这个例子中,我们的两种语言有两个字段。我们可以 同时保存我们文档的英语和土耳其语价值。 当您尝试改进语言支持时,也应该更改映射。 这是第一种观点的两种选择。

现在,让我们看看我们的第二个意见。在这个例子中,我们有相同的数据结构 产品文件。但我们为每种语言创建多个索引。

PUT 44369578
{
  "mappings": {
    "product": {
      "properties": {
        "id": { "type": "integer" },
        "name": {"type": "text", "analyzer": "englishAnalyzer" },
        "price": { "type": "double"}
      }
    }
  }
}

PUT 44369578
{
  "mappings": {
    "product": {
      "properties": {
        "id": { "type": "integer" },
        "name": {"type": "text", "analyzer": "turkishAnalyzer" },
        "price": { "type": "double"}
      }
    }
  }
}

在这种观点中,我们为每个文档都有两个文档,我们尝试合并 在我们搜索文件时我们的申请文件。这是奇怪的一部分 这个意见。但是我们可以在创建新的语言支持时创建新索引。

结论,据我所知,我知道这三种方法。你可以选择其中一个和 不要忘记,每次选举都会获得一些功能,但会带走一些功能。