Elasticsearch在分析字段上的精确匹配

Elasticsearch在分析字段上的精确匹配,第1张

Elasticsearch在分析字段上的精确匹配

混合使用带状词标记器和词干以及您需要的其他任何东西。添加一个子字段,该子字段

token_count
将计算该字段中令牌的数量。

在搜索时,您需要添加一个额外的过滤器,以使索引中的令牌数与搜索文本中具有的令牌数相匹配。在执行实际搜索时,您将需要一个额外的步骤,该步骤应该计算搜索字符串中的标记。之所以这样,是因为带状疱疹会创建标记的多个排列,并且您需要确保其与搜索文本的大小匹配。

尝试这样做,只是为了给您一个想法:

{  "settings": {    "analysis": {      "filter": {        "filter_shingle": {          "type": "shingle",          "max_shingle_size": 10,          "min_shingle_size": 2,          "output_unigrams": true        },        "filter_stemmer": {          "type": "porter_stem",          "language": "_english_"        }      },      "analyzer": {        "ShingleAnalyzer": {          "tokenizer": "standard",          "filter": [ "lowercase", "snowball", "filter_stemmer", "filter_shingle"          ]        }      }    }  },  "mappings": {    "test": {      "properties": {        "text": {          "type": "string",          "analyzer": "ShingleAnalyzer",          "fields": { "word_count": {   "type": "token_count",   "store": "yes",   "analyzer": "ShingleAnalyzer" }          }        }      }    }  }}

和查询:

{  "query": {    "filtered": {      "query": {        "match_phrase": {          "text": { "query": "HaMbUrGeRs BUN"          }        }      },      "filter": {        "term": {          "text.word_count": "2"        }      }    }  }}

shingles
过滤器是在这里非常重要,因为它可以创建令牌的组合。不仅如此,这些是保留顺序或令牌的组合。Imo,在这里要实现的最困难的要求是更改令牌(填充,降低外壳等),并重新组合原始文本。除非您定义自己的“串联”过滤器,否则我认为除了使用
shingles
过滤器之外没有其他方法。

但是

shingles
还有另一个问题:它会创建不需要的组合。对于像
"Hamburgers buns in LosAngeles"
您这样的文本,最终会有一长串带状疱疹:

          "angeles",          "buns",          "buns in",          "buns in los",          "buns in los angeles",          "hamburgers",          "hamburgers buns",          "hamburgers buns in",          "hamburgers buns in los",          "hamburgers buns in los angeles",          "in",          "in los",          "in los angeles",          "los",          "los angeles"

如果您只对 完全
匹配的文档感兴趣,则仅当您搜索“洛杉矶的汉堡包”时(而不与“洛杉矶的任何汉堡包”类似),以上文档才匹配,那么您需要过滤长长的带状疱疹的方法。我看的方式是使用

word_count



欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/4957048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存