栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何构建elasticsearch查询,以使文档字段中的每个标记都匹配?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何构建elasticsearch查询,以使文档字段中的每个标记都匹配?

这是个好方法。

它不是完美的,但是在简单性,计算和存储方面是一个很好的折衷。

  • 索引字段的令牌计数
  • 获取搜索文本的令牌计数
  • 执行过滤的查询并强制结果之间的令牌数相等

您将需要使用分析API来获取令牌计数。确保使用与所讨论字段相同的分析仪。这是一个VB.NET函数,用于获取令牌计数:

Private Function GetTokenCount(ByVal RawString As String, Optional ByVal Analyzer As String = "default") As Integer    If Trim(RawString) = "" Then Return 0    Dim client = New ElasticConnection()    Dim result = client.Post("http://localhost:9200/myindex/_analyze?analyzer=" & Analyzer, RawString) 'Submit analyze request usign PlainElastic.NET API    Dim J = JObject.Parse(result.ToString()) 'Populate JSON.NET JObject    Return (From X In J("tokens")).Count() 'returns token count using a JSON.NET JObjectEnd Function

您将需要在索引时使用它来存储相关字段的令牌计数。确保在TokenCount的映射中有一个条目

这是一个很好的elasticsearch查询,用于利用此新令牌计数信息:

{  "size": 30,  "query": {    "filtered": {      "query": {        "match": {          "MyField": { "query": "[query]", "operator": "AND"          }        }      },      "filter": {        "term": {          "TokenCount": [tokencount]        }      }    }  }}
  • 将[query]替换为搜索字词
  • 将[tokencount]替换为搜索字词中的令牌数量(使用上面的GetTokenCount函数

这样可确保所有匹配项至少与中的令牌数一样多

MyField

上面有一些缺点。例如,如果我们匹配字段“ blue red”,并且用户搜索“ blue
blue”,则上面的内容将触发匹配。因此,您可能需要使用唯一的令牌过滤器。您可能还希望调整过滤器,以便

参考

  • 克林顿·戈麦利(Clinton Gormely)启发了解决方案


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号