java - elasticsearch中的通配符搜索
问题描述
目前我使用以下通配符搜索我的服务,
{
"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”,它不会给出任何结果,而通配符给出。
让我知道,如果有人有想法。索引时间的变化对我来说也很好。
解决方案
您可以按如下方式分解通配符,这适用于您给出的示例:
GET my_index/_search
{
"query": {
"bool": {
"must": [
{"wildcard": {"PRODUCT_DESCRIPTION": "collab*"}},
{"wildcard": {"PRODUCT_DESCRIPTION": "serv*"}},
{"wildcard": {"PRODUCT_DESCRIPTION": "shiri*"}}
]
}
}
}
或者,您可以查看在索引时使用ngram,这将允许匹配单词中的字符序列。