考虑一个ElasticSearch实体:
{
"id": 123456,
"keywords": ["apples", "bananas"]
}
现在,假设我想通过搜索apple
来找到这个实体。
{
"match" : {
"keywords" : {
"query" : "apple",
"operator" : "AND",
"minimum_should_match" : "75%"
}
}
}
问题是数组中的两个字符串都需要最小匹配值75%
,所以什么都找不到。有没有办法说类似minimumSouldMatch: "75% of any array fields"
的东西?
请注意,我需要使用AND
,因为keywords
的每个项目可能由较长的文本组成。
编辑:
我尝试了提出的解决方案,但没有一个给出预期的结果。我猜问题是文本可能相当长,例如:["national gallery in prague", "narodni galerie v praze"]
我猜模糊扩展只是不能扩展这么长的字符串,如果你只是开始搜索“国家g”。
通过嵌套对象,这是否可能实现?
{ keywords: [{keyword: "apples"}, {keyword: "babanas"}}
然后在关键字上加上minimumShouldMatch=1
然后在每个keyword
上加上75%
1条答案
按热度按时间b5buobof1#
根据文件
匹配查询的类型为布尔值。这意味着分析提供的文本,分析进程将根据提供的文本构造布尔查询。可以将运算符参数设置为或或和来控制布尔子句(默认为或)。可以使用minimum_should_match参数设置要匹配的可选should子句的最小数目。
如果您要搜寻多个词语基元,例如“apples mangoes”,并将最小值设定为100%,则表示两个词语基元都应该出现在文件中。如果您将其设定为50%,则表示至少应该出现其中一个词语基元。
如果要部分匹配令牌
可以使用模糊参数
使用模糊性可以设置匹配所允许的最大编辑距离
如果您尝试将单词与其根形式进行匹配,则可以使用“stemming”标记过滤器
生成的令牌
词干分解将单词分解为它们的根形式。
您还可以探索n-gram、边缘gram以进行部分匹配