【发布时间】:2013-09-20 22:01:29
【问题描述】:
我有一个值为“en sv”的索引字段“properties.language”。该字段有一个 multi_field 映射,由两个字段组成,一个已分析(名称“语言”),一个未分析(名称“_exact”)。
如何在不必同时查询“properties.language”和“properties.language._exact”的情况下发出单个搜索查询?
编辑:
这是我的配置:
索引数据:
{
"_index": "51ded0be98035",
"_type": "user",
"_id": "WUzwcwhTRbKur7J5ZY_hgA",
"_version": 1,
"_score": 1,
"_source": {
"properties": {
"language":"en sv"
}
}
}
“用户”类型的映射:
{
"user": {
"properties": {
"properties": {
"properties": {
"language": {
"type": "multi_field",
"fields": {
"language": {
"type": "string",
"analyzer": "standard",
"index": "analyzed"
},
"_exact": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
}
搜索查询:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [{
"or": [{
"term": {
"properties.language": "en sv"
}
}, {
"term": {
"properties.language._exact": "en sv"
}
}]
}]
}
}
}
}
}
【问题讨论】:
-
您能粘贴您的设置(分析器)、映射和查询吗?仅通过描述很难判断您希望获得什么样的结果。
-
我已经更新了问题。
-
那么你总是想精确匹配
en sv?如果是这样,那么您只需要在您的_exact字段上进行必须匹配。虽然,我猜这不是你遇到的问题......我很困惑你在查询中实际上想要完成什么。 -
不,我希望能够同时匹配分析的文本和准确的文本。但我不想在查询中同时指定两者。 IE。以下查询应匹配:['en sv', 'sv', 'en']。我也想对确切的文本进行通配符搜索,但这是一个不同的问题......
-
我很难理解为什么您需要对任何东西(通配符除外)进行完全匹配,除非您没有向我们提供所有要求。如果您只是使用沼泽标准映射并将“ev sv”发送给它。查询 ['en sv', 'sv', 'en'] 将全部匹配。然后将 not_analyzed 版本用于通配符。尽管有更快的方法来进行类似通配符的搜索。
标签: elasticsearch