В моих документах, проиндексированных эластичным поиском, у меня есть поле с именем IPC8s.IPC8
, представляющее собой массив строк, которые могут выглядеть следующим образом:
["B63H011/00"]
["B60F3", "B60K1", "B60K17", "B60K17/23", "B60K6", "B60K6"]
["G06F017/00"]
etc...
(для любого любопытного это классификация патентов CPCцифры)
Мне нужно запросить это поле с конечными подстановочными знаками. Другими словами, если я введу «B63H», документ, содержащий «B63H011 / 00», должен совпадать. То же самое, если я введу «B63H011 /» или «B63H011 / 0».
Я пробовал несколько запросов, ни один из которых не работал:
{
query_string: {
default_field: "IPC8s.IPC8",
query: "(B63H*) OR (B63H011/*)",
analyze_wildcard: true
}
}
Я пробовал этот также с \"B63H*\" OR \"B63H011/*\"
, не работает.
Тогда я попробовал:
[{
wildcard: {
"IPC8s.IPC8": { value: "B63H*" }
}
},
{
wildcard: {
"IPC8s.IPC8": { value: "B63H011/*" }
}
}]
Это тоже не работает. Затем я попытался убежать от «/», потому что его нужно понимать буквально. Не сработало.
Что я делаю не так? Спасибо.
Редактировать : Вот сопоставление для этого конкретного поля:
"IPC8s": {
"properties": {
"IPC8": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
Вот моя последняя попытка, которая все еще не сработала (если я небез косой черты ,asticsearch возвращает ошибку):
{
query_string: {
default_field: "IPC8s.IPC8",
query: "(B63H*) OR (B63H011\\/*)",
analyze_wildcard: true,
analyzer: "keyword"
}
}
Редактировать 2 : Это похоже на уловку:
{
query_string: {
default_field: "IPC8s.IPC8.keyword",
query: "(B63H*) OR (B63H011\\/*)",
analyze_wildcard: true,
analyzer: "keyword"
}
}