当前位置: 首页 > 面试题库 >

搜索包含在值中的ElasticSearch字段

宗政和韵
2023-03-14
问题内容

我正在尝试在ElasticSearch中运行类似的字段查询:

select * from products where 'milk' like '%'+name+'%'

意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。

我该怎么做?


问题答案:

我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引:

curl -XPUT 'localhost:9200/tests' -d '
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "my_analyzer" : {
                    "tokenizer" : "ngrams"
                }
            },
            "tokenizer" : {
                "ngrams" : {
                    "type" : "nGram",
                    "min_gram" : "2",
                    "max_gram" : "10"
                }
            }
        }
    },
    "mappings": {
        "test": {
            "properties": {
                "product_name": {
                    "type": "string",
                    "analyzer": "standard",
                    "search_analyzer": "my_analyzer"
                }
            }
        }
    }
}'

然后,您可以索引一些数据:

curl -XPOST 'localhost:9200/tests/test/_bulk' -d '
{"index":{}}
{"product_name": "bc"}
{"index":{}}
{"product_name": "cd"}
{"index":{}}
{"product_name": "def"}
'

最后,您可以像这样搜索:

curl -XPOST 'localhost:9200/tests/_search' -d '{
    "query": {
        "match": {
            "product_name": "abcde"
        }
    }
}'

然后您将获得前两个文档bccd



 类似资料:
  • 我试图在ElasticSearch中运行类似的字段查询:

  • 问题内容: 我已经进行了一些搜索,无法弄清楚如何通过过滤数据帧,但是我想知道是否有一种方法可以反向执行:通过该集合的补充来过滤数据帧。例如:达到的效果。 可以通过一种方法来完成吗? 问题答案: 您可以使用invert(〜)运算符(其作用类似于非布尔数据): ,RHS返回的副本在哪里。 包含还接受正则表达式… 如果以上方法引发ValueError,则可能是由于您混合使用了数据类型,所以请使用: 要么

  • 背景我有一个小索引与一些字符串字段(例如名称,街道,城市,电子邮件)。 和类似于 Lorem ipsum dolor sit amet,consectetuer adipiscing Elit。埃尼·康茂多·利古拉·埃盖特·多洛。埃尼安·马萨。同时也是一个社会成员,即natoque penatibus et magnis dis matraft montes,nascetur loomus mus

  • 我在我的项目中使用SKMaps,它用于下载离线地图,我必须使用NSPredicatefor搜索一些SKTPackage集合。 为了显示国家的名称,我读取了这样的“en”值 现在我想从列表中搜索国家的名称。现在我使用以下代码行 但它给了我一个崩溃的消息如下 “NSInvalidArgumentException”,原因:“无法在/包含带有集合(不是集合)的运算符中使用”。 请告诉我使用NSPredi

  • 问题内容: 如果我有一个简单的集合,例如: 如果我要搜索含有维生素B6的水果,则可以执行以下操作: 这样一来,我便可以看到我收藏的所有含有维生素A的水果。但是,我如何能够搜索含有多种维生素(例如维生素B6和C)的水果?我不能简单地搜索,因为那样会寻找数组,而不是独立的字符串。 在Cloud Firestore中甚至有可能吗?如果没有,还有其他替代方法吗? 问题答案: 通过在查询中链接条件来寻找匹配