请教博客文章索引到 Elasticsearch 后,对多个字段搜索带空格单词的语法?

2018-08-30 13:33:44 +08:00
 whereabouts
博客文章索引到了 Elasticsearch,有标题 title、正文 body、简介 brief 三个字段,现在用户在博客上搜索带空格的词如"hello world",需求是三个字段其中一个能全文搜索出"hello world"就行了。
语言 nodejs,用的是 ES 的 JavaScript API,搜索了 ES 文档,多个字段的语法现在写成:
es.earch({
index: "blog",
type: "blog",
body: {
...
query: {
multi_match: {
query: "hello world",
fields: ["title", "body", "brief"]
}
}
}

match_match 实现了对三个字段的搜索(区别于 match 只搜索一个),但是搜出来的结果是,只要有 hello 或 world 就属于结果,应该是带空格的搜索词“ hello world ”当成了 OR 的搜索,匹配任意一个。
请教如何能在多字段的情况下做类似 AND 的搜索?需求是"hello world"要连起来才算匹配,中间只能有一个空格,只是在字段中出现过 hello 和 world 两个词的结果不算,类似于谷歌带两个引号的那种精确匹配。
3313 次点击
所在节点    程序员
2 条回复
csyjgu
2018-08-30 13:39:22 +08:00
先分词再搜索,每个词在三个字段里都搜,每个词都能匹配上才返回,用多个 must query。
yuan0808
2018-08-30 14:19:23 +08:00
分词啊,不分词得用 term

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

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

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

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

© 2021 V2EX