示例1: 我的查询字词是“ abcd”。
我的查询结构是这样的:
query: {
query_string: {
query: "abc",
fields: ["field1", "field2", "field3"]
}
},
size: 50,
"highlight": {
"fields": {
"field1": {},
"field2": {},
"field3": {}
}
它与以下实例匹配:
abc abcs abc_def_ghi
但是它与def_abc或def_abc_ghi不匹配。 基本上是abc位于字符串中间的情况。
示例2: 在上面的同一示例中,如果我的查询是abc_def
尽管存在abc_def,但它与abc_def_ghi不匹配。
我尝试了prefix_phrase,它解决了方案2,但是漏掉了示例1的问题。
任何帮助将不胜感激。
答案 0 :(得分:0)
对于这些用法,您应该使用wildcard in query或regular expression
如果您使用词条查询,则可以改用wildcard term query或regexp query。
答案 1 :(得分:0)
phase_prefix
就像穷人自动完成一样,它会搜索以您的情况abc
,abcs
,abc_def_ghi
开头的字段。因为在abc
的情况下,您的字段不是以def_abc
开头,所以def_abc_ghi
不能与词组前缀一起使用。_
(空格)替换为您字段中的
(空格),而analyzing字段中。检查此answer。因此您的令牌会生成[def,abc,ghi]
,而不是[def_abc_ghi]
之类的单个令牌。那么您可以在已分析的字段上使用cross_field进行搜索,该字段应满足您提到的所有情况。