Liferay 门户 7.3.7 不区分大小写,使用 ElasticSearch 时没有变音符号
Liferay portal 7.3.7 case insensitive, diacritics free with ElasticSearch
我在 liferay portal 7.3.7 上进退两难,使用自定义 ddm 字段在 JournalArticles 中通过 elasticsearch 进行不区分大小写和无变音符号的搜索。 Liferay 在 Configuration->Search 中生成字段映射,如下所示:
...
},
"localized_name_sk_SK_sortable" : {
"store" : true,
"type" : "keyword"
},
...
我希望这些 *_sortable 字段可用于不区分大小写和无 dia 搜索,因此我尝试在 System Settings->Search->Elasticsearch 中将分析器和规范器添加到 liferay 搜索高级配置中7 像这样:
{
"analysis":{
"analyzer":{
"ascii_analyzer":{
"tokenizer": "standard",
"filter":["asciifolding","lowercase"]
}
},
"normalizer": {
"ascii_normalizer": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
}
}
之后,我覆盖了 template_string_sortable 的映射:
{
"template_string_sortable" : {
"mapping" : {
"analyzer": "ascii_analyzer",
"normalizer": "ascii_normalizer",
"store" : true,
"type" : "keyword"
},
"match_mapping_type" : "string",
"match" : "*_sortable"
}
}
重建索引后,我的可排序字段如下所示:
...
},
"localized_name_sk_SK_sortable" : {
"normalizer" : "ascii_normalizer",
"store" : true,
"type" : "keyword"
},
...
接下来,我尝试为我的 ddm 结构创建新内容,但我所有的可排序字段看起来都一样,如下所示:
"localized_title_sk_SK": "test diakrity časť 1 ľščťžýáíéôň title",
"localized_title_sk_SK_sortable": "test diakrity časť 1 ľščťžýáíéôň title",
但是我需要那个没有国家字符的可排序字段,所以我可以通过 localized_title_sk_SK_sortable 中的 wildcardQuery 等找到“cast 1”等等... THX寻求任何建议(也许我只是对整个问题有错误的看法?而且我真的是 ES 的新手)
首先最好应用 original_ascii_folding
,然后再应用 lowercase
过滤器,但请记住此过滤器用于搜索,您的 _source
数据不会更改因为你在现场应用了分析仪。
如果您需要在摄取数据之前对其进行操作,您可以使用 Elasticsearch 中的摄取管道功能以获取更多信息,请查看 here。
我在 liferay portal 7.3.7 上进退两难,使用自定义 ddm 字段在 JournalArticles 中通过 elasticsearch 进行不区分大小写和无变音符号的搜索。 Liferay 在 Configuration->Search 中生成字段映射,如下所示:
...
},
"localized_name_sk_SK_sortable" : {
"store" : true,
"type" : "keyword"
},
...
我希望这些 *_sortable 字段可用于不区分大小写和无 dia 搜索,因此我尝试在 System Settings->Search->Elasticsearch 中将分析器和规范器添加到 liferay 搜索高级配置中7 像这样:
{
"analysis":{
"analyzer":{
"ascii_analyzer":{
"tokenizer": "standard",
"filter":["asciifolding","lowercase"]
}
},
"normalizer": {
"ascii_normalizer": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
}
}
之后,我覆盖了 template_string_sortable 的映射:
{
"template_string_sortable" : {
"mapping" : {
"analyzer": "ascii_analyzer",
"normalizer": "ascii_normalizer",
"store" : true,
"type" : "keyword"
},
"match_mapping_type" : "string",
"match" : "*_sortable"
}
}
重建索引后,我的可排序字段如下所示:
...
},
"localized_name_sk_SK_sortable" : {
"normalizer" : "ascii_normalizer",
"store" : true,
"type" : "keyword"
},
...
接下来,我尝试为我的 ddm 结构创建新内容,但我所有的可排序字段看起来都一样,如下所示:
"localized_title_sk_SK": "test diakrity časť 1 ľščťžýáíéôň title",
"localized_title_sk_SK_sortable": "test diakrity časť 1 ľščťžýáíéôň title",
但是我需要那个没有国家字符的可排序字段,所以我可以通过 localized_title_sk_SK_sortable 中的 wildcardQuery 等找到“cast 1”等等... THX寻求任何建议(也许我只是对整个问题有错误的看法?而且我真的是 ES 的新手)
首先最好应用 original_ascii_folding
,然后再应用 lowercase
过滤器,但请记住此过滤器用于搜索,您的 _source
数据不会更改因为你在现场应用了分析仪。
如果您需要在摄取数据之前对其进行操作,您可以使用 Elasticsearch 中的摄取管道功能以获取更多信息,请查看 here。