【问题标题】:Elasticsearch - Find document by term which is only part of given query-stringElasticsearch - 按术语查找文档,这只是给定查询字符串的一部分
【发布时间】:2018-11-21 12:49:32
【问题描述】:

我在elasticsearch中搜索有问题,希望您能帮忙。

我想找到一个关键字标记化的文档,仅由索引中的分析器小写。当生成的术语是搜索查询的一部分时,我希望 Elasticsearch 找到它。

搜索示例:

 "query": {
    "match": {
      "categoryNames": "CD&DVD Aufbewahrung schwarz"
    }
  }

我要查找的文档:

"_source": {
    "categoryId": 11972638,
    "categoryNames": [
        "DVD-Koffer",
        "CD-Koffer",
        "CD-Aufbewahrung",
        "DVD-Aufbwahrung",
        "DVD-Ordner",
        "EDV-DVD-Aufbewahrung",
        "EDV-CD-Aufbewahrung",
        "CD&DVD Aufbewahrung",
        "Multimediabox"
    ],
    "lvl3Id": 11972638
}

索引分析器:

"analysis" : {
    "analyzer" : {
        "default" : {
             "type": "custom",
             "tokenizer": "keyword",
             "filter" : ["lowercase"]
         }
      }
 }

文档的词向量,我要查找的:

"cd&dvd aufbewahrung": {
    "term_freq": 1,
    "tokens": [
      ...
    ]
},
"cd-aufbewahrung": {
     "term_freq": 1,
     "tokens": [
       ...
      ]
},
"cd-koffer": {
      "term_freq": 1,
      "tokens": [
        ...
       ]
},
....

我没有结果。当我搜索“CD&DVD aufbewahrung”时,我找到了该文档。

我认为 elasticsearch 试图找到一个不存在的术语“CD&DVD Aufbewahrung schwarz”,而不是匹配“CD&DVD Aufbewahrung”并忽略“schwarz”。

搜索不能使用标准分析器,因为重要的是只有“CD&DVD Aufbewahrung”才能找到“CD&DVD Aufbewahrung”,而不是仅包含“Aufbewahrung”或“Aufbewahrung CD&DVD”的术语,当术语通过例如分析空格。

我对上述文档的期望的一些示例搜索:

CD&DVD Aufbewahrung -> Found
CD&DVD aufbewahrung -> Found
schwarz CD&DVD Aufbewahrung -> Found
CD&DVD Aufbewahrung gelb -> Found
schwarz CD&DVD Aufbewahrung gelb -> Found
CD&DVD schwarz Aufbewahrung -> not Found
Aufbewahrung CD&DVD -> not Found
schwarz CD & DVD Aufbewahrung -> not Found
schwarzCD&DVD Aufbewahrung -> Not Found

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    也许Shingle Token Filter 的自定义分析器在这里会有所帮助。请看下面的代码:

    映射

    PUT /so53412408
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "lowercase_keyword": {
              "tokenizer": "keyword",
              "filter": [
                "lowercase"
              ]
            },
            "lowercase_shingle": {
              "tokenizer": "whitespace",
              "filter": [
                "lowercase",
                "my_shingle"
              ]
            }
          },
          "filter": {
            "my_shingle": {
              "type": "shingle",
              "min_shingle_size": 2,
              "max_shingle_size": 4
            }
          }
        }
      },
      "mappings": {
        "_doc": {
          "properties": {
            "categoryNames": {
              "type": "text",
              "analyzer": "lowercase_keyword",
              "search_analyzer": "lowercase_shingle"
            }
          }
        }
      }
    }
    

    样本数据

    POST /so53412408/_doc
    {
      "categoryNames": [
        "DVD-Koffer",
        "CD-Koffer",
        "CD-Aufbewahrung",
        "DVD-Aufbwahrung",
        "DVD-Ordner",
        "EDV-DVD-Aufbewahrung",
        "EDV-CD-Aufbewahrung",
        "CD&DVD Aufbewahrung",
        "Multimediabox"
      ]
    }
    

    搜索查询

    GET /so53412408/_search
    {
      "query": {
        "match": {
          "categoryNames": "schwarzCD&DVD Aufbewahrung"
        }
      }
    }
    

    结果

    CD&DVD Aufbewahrung              -> Found
    CD&DVD aufbewahrung              -> Found
    schwarz CD&DVD Aufbewahrung      -> Found
    CD&DVD Aufbewahrung gelb         -> Found
    schwarz CD&DVD Aufbewahrung gelb -> Found
    CD&DVD schwarz Aufbewahrung      -> Not Found
    Aufbewahrung CD&DVD              -> Not Found
    schwarz CD & DVD Aufbewahrung    -> Not Found
    schwarzCD&DVD Aufbewahrung       -> Not Found
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多