唐山市住房公积金管理中心:search(11)- elastic4s-模糊查询

admin 5个月前 (05-11) 科技 49 0

许多时刻搜索用户对查询语句具有模糊感受,他们只能提供约莫的形貌。好比一个语句的部门,或者字句顺序颠倒等。通过模糊查询可以辅助用户更准确的找出他们希望搜索的效果。

模糊查询包罗前后缀,语句(phrase)查询。前缀查询在非文本查询和全文查询字段中使用是有着差别的效果:在非文本字段查询中我们需要严酷根据词字顺序举行匹配,而全文查询中由于目的字段在构建索引时已经举行了分词处置,以是匹配是在分词中举行匹配的。下面是一些非文本前后缀查询的例子:

POST /bank/_search { "query" : { "prefix" : { "address.keyword": "880" } } } POST /bank/_search { "query" : { "wildcard": { "address.keyword": "*Holmes*" } } } POST /bank/_search { "query" : { "regexp": { "address.keyword": ".*Holmes.*" } } }

elastic4例子: 

  val qPrefix = search("bank").query(prefixQuery("address.keyword","880")) val qWildcard = search("bank").query(wildcardQuery("address.keyword","*Holmes*")) val qRegex = search("bank").query(regexQuery("address.keyword",".*Holmes.*"))

全文查询中常用match_phrase:这是一种语句查询。如:

GET /books/_search { "query": { "match_phrase": { "publisher": "人民出版社" } } }

一个有意义的语句中每个字在句子中的位置都是按顺序的。“人民出版社”可能被分词成“人民”、“人民版”,“人民社”、“社“等。但实际上许多图书行内人称“人社版“。也就是说应该允许一定水平的灵活性,即字在句中的位置允许一定水平的错位。这个水平可以用slop来示意:

GET /books/_search { "query": { "match_phrase": { "publisher": { "query": "人社版", "slop" : 10 } } } }

上面这个slop = 10 的意思是我们可以允许十步字距调整。slop值越大笼罩词段越广,不外可能会影响效率。elastic4请求表达如下:

  val qPhrase = search("books").query( matchPhraseQuery("PUBLISHER","人社版").slop(10) )

另外,match_phrase在用户录入查询条件时可以作为提醒(auto-completion)或者即录即查(search_as_you_type)使用。这时用前缀查询match_phrase_prefix最为合适。由于可以兼顾英文到字母层级的录入查询:

GET /books/_search { "query": { "match_phrase_prefix": { "publisher": { "query": "人社版", "slop" : 10 } } } }

用elastic4来示意:

  val qPhrasePfx = search("books").query( matchPhrasePrefixQuery("PUBLISHER","人社版").slop(10) )

 

,

申博Sunbet

申博Sunbet-有你喜欢的sunbet真人、sunbet电子、sunbet棋牌、sunbet代理合作。

allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:唐山市住房公积金管理中心:search(11)- elastic4s-模糊查询

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:673
  • 页面总数:0
  • 分类总数:8
  • 标签总数:991
  • 评论总数:303
  • 浏览总数:13679