我使用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: ~
答案 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"}
}
}
}
}
在这种观点中,我们为每个文档都有两个文档,我们尝试合并 在我们搜索文件时我们的申请文件。这是奇怪的一部分 这个意见。但是我们可以在创建新的语言支持时创建新索引。
结论,据我所知,我知道这三种方法。你可以选择其中一个和 不要忘记,每次选举都会获得一些功能,但会带走一些功能。