索引映射(Kibana)
PUT /new_index
{
"mappings": {
"properties": {
"items": {
"type": "nested"
},
"contents": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 50000
}
}
},
"library_notes": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 50000
}
}
},
"image_path": {
"type": "text",
"fielddata": true
}
}
}
}
[
"library_language": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"library_notes": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 50000
}
}
},
"library_subject": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
]
Sample library_notes data(is an array)
"library_notes": [
"\"The Big Picture Show, 14 September 2007 - 23 March 2008, Singapore Art Museum\"--T.p. verso.",
"Artists: Wong Shih Yaw; Charlie Co; Entang Wiharso; Syed Thajudeen; Zakaria Omar; Somboon Hormtientong; Lee Hsin Hsin; Dang Xuan Hoa; Lim Tze Peng; Hong Sek Chern; Ferdinand Montemayor; Antonio (Tony) Leano; Wong Keen; Tan Chin Kuan; Pratuang Emjaroen; Jeremy Ramsey; Gao Xingjian; Marc Leguay; He Kongde; Edgar (Egai) Talusan Fernandez; Pacita Abad; Imelda Cajipe-Endaya; Suos Sodavy; Tin Tun Hlaing; Bayu Utomo Radjikin.",
" In putting together The Big picture Show, the Singapore Art Museum (SAM) has taken the opportunity to bring together for display some of its largest treasures in its collection."
],
the query that i used
{
"from": 0,
"size": 10000,
"track_total_hits": true,
"sort": [
{},
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "doc.containsKey('image_path') && doc['image_path'].size() > 0 ? 0 : 1"
}
}
},
"_score"
],
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"match_phrase": {
"category_code": "ART"
}
},
{
"bool": {
"should": [
{
"wildcard": {
"library_notes.keyword": {
"value": "lim *ze peng",
"case_insensitive": true
}
}
},
{
"wildcard": {
"linking_notes.keyword": {
"value": "lim *ze peng",
"case_insensitive": true
}
}
}
]
}
},
{
"match": {
"is_available": true
}
},
],
"should": []
}
},
"functions": [
{
"random_score": {},
"weight": 1
}
],
"score_mode": "sum"
}
}
},
}
即使library_notes字段中有Lim Tze Peng,通配符搜索也找不到“lim *tze peng”
通配符需要匹配整个标记,在您的情况下,标记是整行:
"Artists: Wong Shih Yaw; Charlie Co; Entang Wiharso; Syed Thajudeen; Zakaria Omar; Somboon Hormtientong; Lee Hsin Hsin; Dang Xuan Hoa; Lim Tze Peng; Hong Sek Chern; Ferdinand Montemayor; Antonio (Tony) Leano; Wong Keen; Tan Chin Kuan; Pratuang Emjaroen; Jeremy Ramsey; Gao Xingjian; Marc Leguay; He Kongde; Edgar (Egai) Talusan Fernandez; Pacita Abad; Imelda Cajipe-Endaya; Suos Sodavy; Tin Tun Hlaing; Bayu Utomo Radjikin.",
因此,要回答您的具体问题,您可以通过使用带有前导和尾随通配符运算符的通配符来找到它
*
:
"value": "*lim ?ze peng*",
但是,如果没有巨大的免责声明,我无法给你这个建议。这是 Elasticsearch 中最慢的操作之一,尤其是在每个记录有多个不同值的字段上,就像您的情况一样。对于大多数用例来说,都有更好的替代方案。因此,我强烈鼓励您考虑为用户提供其他选项来实现他们想要的结果。