当前,我在通配符搜索下方使用我的服务,
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"PRODUCT_DESCRIPTION": "\*collaboration\*services\*shiriyara\*"
}
}
]
}
}
}
这将返回我预期的结果。但是我正在寻找不使用通配符查询来实现此目的的替代方法,因为通配符需要更多时间。
我在“标准”分析字段上尝试了“ query_string”。但是,如果整个单词都匹配,则返回结果。
"query_string": {
"default_field": "PRODUCT_DESCRIPTION",
"default_operator": "AND",
"query": "collaboration services shiriyara"
}
如果字符串是“ collab services shiriyara”,则不会给出任何结果,而通配符会给出结果。
如果有人有想法,请告诉我。索引时间的更改对我来说也很好。
答案 0 :(得分:1)
您可以按以下方式分解通配符,这将适用于您给出的示例:
GET my_index/_search
{
"query": {
"bool": {
"must": [
{"wildcard": {"PRODUCT_DESCRIPTION": "collab*"}},
{"wildcard": {"PRODUCT_DESCRIPTION": "serv*"}},
{"wildcard": {"PRODUCT_DESCRIPTION": "shiri*"}}
]
}
}
}
或者,您可以考虑在索引时间使用ngrams,这将允许单词中字符序列的匹配。
答案 1 :(得分:1)
我知道这是一个老问题,但以防万一有人再次遇到它:在 Elasticsearch 7.9 中引入了一个新的 wildcard field type,用于快速查找字符串值中的模式。