Elasticsearch - 如何使用查询字符串

时间:2016-06-16 16:09:12

标签: elasticsearch

我在使用Elasticsearch技术时遇到了麻烦。我想使用查询字符串在长文本中找到一个确切的值。

实施例: 如果我正在寻找“像我的狗”这样的术语,我希望能够找到包含“我喜欢我的狗和猫”的文件。

为此,我想将查询字符串与引号一起使用(因为我必须实现逻辑运算符AND OR NOT):

{
    "query_string" : {
        "query" : "like my dogs"
    }
}

我的映射可能不好。以下是要查询的字段的映射:

"settings":{
     "analyzer": {
          "default": {
            "type": "custom",
            "tokenizer": "standard",
             "filter": ["asciifolding", "lowercase", "french_stemmer", "elision", "french_stop"]
        },
        "lowercase": {
            "tokenizer": "keyword",
            "filter": ["lowercase"]
        }
},
"mappings": {
    "content": {
         "type": "string",
         "fields": {
              "raw":   { "type": "string", "index": "not_analyzed" },
               "custom":   { "type": "string", "analyzer": "lowercase" }
         }
    }
}

此映射的问题在于Elasticsearch还检索内容中包含以下文本的文档:“我的狗很漂亮”,因为它匹配“我的狗”(包括标记化)。

我该如何克服这个问题?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

默认情况下,ElasticSearch使用标准分析器。使用此分析仪,停止词无法搜索。

使用 not_analyzed 参数,您无法将内容检索到您想要的句子中。

使用小写分析器设置关键字标记器,因此该字段标识为steam,因此无法搜索到所需的字段。

请使用空格标记器修改小写分析器。

应该解决你的问题。

BR

NicolasY