您可以使用映射中的fields属性以不同的方式 分析同一字段 processNumber :
例如,如果要使用ProcessNumber的经过分析和未经分析的版本,则映射为:
{
"type_name": {
"properties": {
"processNumber": {
"type": "string",
"index": "not_analyzed",
"fields": {
"analyzed": {
"type": "string",
"index": "analyzed"
}
}
}
}
}
}
在查询中将未分析的字段称为 。
要引用该字段的分析视图,请使用
查询术语11 / 201、11等将是:
示例过滤器:
{ "query" : { "filtered" : { "filter" : { "term" : { "processNumber" : "11/2014" } } } } }
术语过滤器不分析搜索字符串,因此在这种情况下,输入将与字段倒排索引匹配:11/2014针对该字段。
示例Match_Phrase_prefix:
{ "query": { "match_phrase_prefix": { "processNumber": "11/201" } } }
match_phrase_prefix尝试检查短语中的最后一项是否为index中各项的前缀。如果指定了分析器,它将分析搜索字符串。这就是您需要在此处使用该字段的未分析 版本的原因。如果我们使用 processNumber.analyzed 搜索查询,例如 也将匹配
匹配示例:
{ "query": { "match": { "processNumber.analyzed": "11" } } }
这是直接匹配,因为默认分析器(通常是标准分析器)会将11/2014标记为2014年11月。
您可以使用分析api来查看默认分析器如何分析特定文本。
curl -XPOST "http://<machine>/_analyze?text=11/2014"