我一直在使用通配符,例如:*blah*
但是文档指出您不应该以{{1}}开头通配符值,因为它会增加所需的迭代次数并降低搜索性能。
此外,文档中没有指示通配符是否旨在区分大小写。我注意到,当我搜索小写字母“ a”时,我得到了所有同时具有“ a”或“ A”的东西,但是当我搜索大写字母“ A”时,实际上是*
,我没有得到结果。
我希望此特定搜索的行为与例如,如果我使用*A*
时,Django的ORM行为完全一样,包括不区分大小写。因此,如果我说filter(title__icontains=‘blah’)
,我希望返回标题中带有“ the”(不区分大小写)的任何内容。
答案 0 :(得分:1)
我不知道您将如何避免使用通配符查询的警告方法,因此,如果您在语法上遇到麻烦,这就是下面的样子:
GET /_search
{
"query": {
"wildcard": {
"title": {
"value": "*elved*",
"boost": 1.0,
"rewrite": "constant_score"
}
}
}
}
我刚刚在自己的搜索索引上测试了这种类型的查询,然后搜索与产品标题中的“起泡”正确匹配的*oam*
。
对于不区分大小写,只要您使用内置分析器之一(例如{{3} }或Standard)。但是,如果您使用的是自定义分析器,则只需确保包含lowercase
过滤器,以及您想通过其运行条款的其他任何过滤器。
PUT index_name
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase"
]
}
}
}
}
}
如果您未在字段映射中指定分析器,那么我认为默认情况下它使用standard
,其中包括小写过滤。