【发布时间】:2020-06-05 15:09:02
【问题描述】:
我想搜索要被视为短语的查询的一部分。例如我想搜索“你能给我看酒店和航空业的文件吗” 在这里,我希望将 Airline Industry 视为短语。我在 multi_match 中找不到任何此类设置。 即使我们尝试使用 multi_match 查询,使用 "Can you show me documents for Hospitality 和 \"Airline Industry\"" 。默认分析器将其分解为单独的标记。我不想更改分析器的设置。而且我发现我们可以在 simple_query_string 中执行此操作,但这会导致我们无法像在 multi_match 布尔查询中那样应用过滤器选项,因为我也想在某些字段上应用过滤器。
search_text="Can you show me documents for Hospitality and Airline Industry" 现在我想将 Airline Industry 作为短语传递,以针对 2 个字段搜索我的索引文档。 好吧,假设我有这样的现有代码。
If filter:
qry={
“query":{
“bool”:{
“must”:{
"multi_match":{
"query":search_text,
"type":"best_fields",
"fields":["TITLE1","TEXT"],
"tie_breaker":0.3,
}
},
“filter”:{“terms”:{“GRP_CD”:[“1234”,”5678”] }
}
}
else:
qry={
"query":{
"multi_match":{
"query":search_text',
"type":"best_fields",
"fields":["TITLE1",TEXT"],
"tie_breaker":0.3
}
}
}
'但后来我意识到即使我传递这样的搜索字符串,这段代码也没有将航空业作为一个短语处理 "你能给我看看酒店业和\"航空业\"的文件吗?"
根据弹性搜索文档,我知道有这个查询可以处理这个问题
qry={"query":{
"simple_query_string":{
"query":"Can you show me documents for Hospitality and \"Airline Industry\"",
"fields":["TITLE1","TEXT"] }
} }
但现在我的问题是,如果用户想要应用过滤器.. 使用上面的过滤器查询,我无法通过 simple_query_string' 传递短语和布尔查询
【问题讨论】:
-
simple_query_string是正确的选择之一,但如果使用simple_query_string,您将无法应用哪些过滤器。你能用例如解释一下吗 -
@OpsterESNinjaNishant 已更新代码
标签: elasticsearch token phrase booleanquery elasticsearch-analyzers