【问题标题】:Elasticsearch - How to find exact value in a long text using query stringElasticsearch - 如何使用查询字符串在长文本中查找确切值
【发布时间】:2016-06-16 16:09:12
【问题描述】:

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

示例: 如果我正在寻找“like my dogs”一词,我希望检索包含“I like my dogs and cats”的文档。

为此,我想使用带引号的查询字符串(因为我必须实现逻辑运算符 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 还会检索内容中包含以下文本的文档:“my dog is beautiful”,因为它与“my dog”匹配(包括标记化)。

我该如何克服这个问题?

提前感谢您的帮助。

【问题讨论】:

  • 如果您将字段设为“not_analyzed”,Elasticsearch 将返回准确的结果。

标签: elasticsearch


【解决方案1】:

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

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

使用小写分析器,您可以设置关键字标记器,因此该字段被标识为 steam,因此无法根据需要进行搜索。

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

应该可以解决你的问题。

BR

尼古拉斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多