【问题标题】:Elasticsearch terms with spaces带空格的 Elasticsearch 术语
【发布时间】:2018-03-19 10:24:59
【问题描述】:

我有一份对 ElasticSearch 感兴趣的用户列表:

这是我的映射:

      mappings: {
        users: {
          properties: {
            username: {
              type: 'text',
              analyzer: 'autocomplete',
              search_analyzer: 'autocomplete'
            },
            interests: {
              type: 'text'
            },
            locations: {
              type: 'text'
            },
            roles: {
              type: 'text'
            }
          }
        }
      },
      settings: {
        analysis: {
          analyzer: {
            autocomplete: {
              type: 'custom',
              tokenizer: 'autocomplete',
              filter: ['lowercase']
            }
          },
          tokenizer: {
            autocomplete: {
              type: 'edge_ngram',
              min_gram: 3,
              max_gram: 10,
              token_chars: [
                'letter', 'digit'
              ]
            }
          }
        }
      }

这是一个示例文档:

  {
   "_index": "users",
   "_type": "users",
   "_id": "4",
   "_score": 1.0,
   "_source": {
     "username": null,
     "interests": [
       "live events"
     ],
     "locations": [
       "abington",
       "connecticut"
     ],
     "roles": [

     ]
   }
 }

现在当我搜索时:

{
  terms: ["live events"]
}

我没有得到任何结果。我查了一下,如果这个词包含space,那么就会发生这种情况。我的猜测是 terms 寻找完全匹配,但我无法理解这里发生了什么。

【问题讨论】:

  • 兴趣字段为type:text,导致原始文本保存为:["live", "events"]。如果您在该字段中索引了“实时事件”,它会将其存储为上述 2 个单独的标记。当您使用术语查询时,它会尝试直接匹配“实时事件”。你需要match在这里查询。 Match 将确保您的查询经历与用于存储文档相同的分析阶段。
  • @ArchitSaxena 我需要将兴趣限制为数组作为输入,因此匹配不起作用。有什么方法可以在不重复关键字的情况下完成这项工作?
  • 同样的问题,但我正在寻找结果:{ terms: ["live events", "something", "else"] } 任何想法?

标签: elasticsearch


【解决方案1】:

您应该只对关键字数据类型使用term/terms 查询。在您的情况下,您正在查询带有 text datatype 的字段,如映射中所写:

    interests: {
      type: 'text'
    }

在这种情况下,您必须改用匹配查询,所以:

{
    "query": {
        "match" : {
            "interests" : "live events"
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多