Elasticsearch 怎么实现在搜索结果中排除某个词?类似于 Google 的减号指令

2016-09-18 09:52:21 +08:00
audestick  audestick
  2 、减号

  减号(-)表示搜索结果不包含减号后面词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着要排除的词,谷歌和百度都支持这个词。

  例如:搜索 “苹果 –电影”,返回结果页面就排除了《苹果》这部电影的结果,而不影响苹果手机电脑和苹果作为水果的内容。
5831 次点击
所在节点   程序员  程序员
12 条回复
audestick
audestick
2016-09-18 09:57:00 +08:00
audestick
audestick
2016-09-18 09:57:46 +08:00
audestick
audestick
2016-09-18 09:58:05 +08:00
audestick
audestick
2016-09-18 09:58:29 +08:00
求助!先提前谢谢三位同学了~
xguox
xguox
2016-09-18 10:03:18 +08:00
oaix
oaix
2016-09-18 10:18:22 +08:00
{query: {bool: { must_not: {term: {name: "apple"}} }} }
audestick
audestick
2016-09-18 10:29:31 +08:00
@xguox cool!我得好好看下文档了看来...
xguox
xguox
2016-09-18 11:06:02 +08:00
@oaix 这是精确匹配吧? 不是 "apple" 才命中, "an apple" 都不会命中 这个查询
xguox
xguox
2016-09-18 11:07:53 +08:00
说错, 应该 "an apple" 之类的可以命中.
oaix
oaix
2016-09-18 11:16:28 +08:00
@xguox 嗯,不应该用 term ,使用 match ,比如楼主需要搜索 apple ,但排除 film ,可以这样搜{query: {bool: { must: { match: "apple"}, must_not: {match: "film"}}}
Suclogger
Suclogger
2016-09-18 11:38:22 +08:00
恩, bool query 是正解
audestick
audestick
2016-09-18 11:40:08 +08:00
@xguox @oaix @oaix
是的,我把问题想复杂了.

两者都可以.

一个是 query string
一个是 match query

都可以.

只不过 query string 更简洁一点

谢了各位~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/306888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX