我想寻求帮助。我想在标题和内容中搜索一个单词。这是结构
'body' => array( 'mappings' => array( 'myindex' => array( '_source' => array( 'enabled' => true ), 'properties' => array( 'Title' => array( 'type' => 'string', 'fields'=> array( 'raw' => array( 'type' => 'string', 'index' => 'not_analyzed' ) ) ), 'Content' => array( 'type' => 'string' ), 'Image' => array( type' => 'string', 'analyzer' => 'standard' ) ) ) ) )
查询字符串看起来像这样,在这里我想在“ 15-game”之类的文本中搜索“ 15-g”:
"query" : { "query_string": { "query": "*15-g*", "fields": [ "Title", "Content" ] } }
如果我重复这个问题,请接受我的道歉,但我无法查明发生了什么,以及为什么它不返回任何结果。
但是我无法与我合作。
真正有趣的是,如果我搜索“ 15-g”(15个 空格 - 空格 g),它将返回结果。
提前非常感谢您!
也.raw向您添加一个字段,Content然后在这些.raw字段上进行搜索:
.raw
Content
{ "query": { "query_string": { "query": "*15-g*", "fields": [ "Title.raw", "Content.raw" ] } } }
在您要搜索的文本中有 空格 并且 希望 该空格与您的字段匹配的任何地方,都需要对其进行转义(带有\)。另外,任何时候只要您具有大写字母和通配符,并且想要将其与.raw需要设置lowercase_expanded_terms为的字段进行匹配false,因为默认情况下该设置为true,它将小写搜索字符串(它将搜索laptop - black):
\
lowercase_expanded_terms
false
true
laptop - black
{ "query": { "query_string": { "query": "*Laptop\\ -\\ Black*", "lowercase_expanded_terms": false, "fields": [ "Title.raw", "Content.raw" ] } } }