身安不如心安,屋宽不如心宽 。

模糊匹配"官方编制",但不想匹配"非官方编制"

Elasticsearch | 作者 maomaomao | 发布于2021年01月07日 | 阅读数:1084

大神们,请帮我解决一个问题。
我的文章关联的多个标签,字段是用汉字存储的,多个标签用英文逗号隔开,
例如一篇文章关联的标签的值是"社会招聘,官方编制",
另一篇文章关联的标签是"社会招聘,非官方编制"
搜索时因为是多条件搜索所以使用了boolquery,
在匹配标签汉字时使用的match_phrase
例如,"must":[{"match_phrase":{"tagName":{"query":"官方编制"}}}]
我只想要标签里有”官方编制“的文章
但是这样也会得到 标签是"社会招聘,非官方编制"的文章

大神们,这个该怎么解决啊?
换一个什么样的方案比较好?
已邀请:

Morry

赞同来自:

把tags拆分成多值的keyword,搜索时必须完全匹配。

yuanzhi - 卧龙之才,远胜于吾

赞同来自:

可以试一下match_phrase_prefix

Ombres

赞同来自:

标签用keyword ,多值就行
 
PUT /test-index1
{
"mappings": {
"properties": {
"tags":{
"type": "keyword"
}
}
}
}

POST /test-index1/_doc/1
{
"tags":["非官方编制","官方编制"]
}

POST /test-index1/_doc/2
{
"tags":["官方编制"]
}

POST /test-index1/_doc/3
{
"tags":["非官方编制"]
}


GET /test-index1/_search
{
"query": {
"term": {
"tags": {
"value": "官方编制"
}
}
}
}

JiangJibo - 喊我雷锋

赞同来自:

你再弄个must_not, match_phrase:"非官方编制" ?

FFFrp

赞同来自:

有没有keyword类型的标签,直接用term匹配,标签应该不用分词匹配吧;或者在这个query的基础上增加must_not: 非官方编制,但是这个方法不太好,

要回复问题请先登录注册