对于以下对象:
{
name: 'value1',
name$en_US: 'value2',
name$fr_CA: 'value3',
...
...
}
我的查询 `
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"type": "product"
}
},
{
"or": [
{
"regexp": {
"name": ".*sometext.*"
}
},
{
"regexp": {
"name$en_US": ".*sometext.*"
}
}
]
}
]
}
},
}
` 针对不同可能的语言环境的我的映射:
NAME: {
type: "string",
index: "not_analyzed",
doc_values: true,
fielddata: {
format: "doc_values"
},
fields: {
ft: {
type: "string",
analyzer: "standard",
ignore_above: 10922
}
},
ignore_above: 10922
},
NAME$en_CN: {
type: "string",
index: "no",
ignore_above: 10922
},
NAME$en_US: {
type: "string",
index: "no",
ignore_above: 10922
},
NAME$es_US: {
type: "string",
index: "no",
ignore_above: 10922
},
我遇到一个问题,即ElasticSearch与名称配合良好但在名称上失败并且出现在语言环境中。我该如何解决?
添加了查询和映射。
答案 0 :(得分:0)
问题是,您的name$en_US
和其他语言特定字段的index: "no"
使其无法搜索。
如果字段的内容未编入索引,则无法在其上进行搜索。来自the documentation的代码段:
index
选项控制是否对字段值编制索引。它接受true
或false
。 未编入索引的字段无法查询。