【问题标题】:ElasticSearch catenate_words -- only keep concatenated valueElasticSearch catenate_words -- 只保留连接值
【发布时间】:2021-06-26 05:31:10
【问题描述】:

以下示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-word-delimiter-graph-tokenfilter.html

特别是 catenate_words 选项。

我想用它来连接单词,然后我可以在连接单词之前和之后的短语查询中使用这些单词,但是单词部分阻止了这种情况。

例如,他们的例子是这样的: super-duper-xl → [ superduperxl, super, duper, xl ]

现在,如果我的实际短语是“多么棒的 super-duper-xl”,它会变成一个序列:

[what,a,great,superduperxl,super,duper,xl]

这与短语“great superduperxl”相匹配,很好。

但是,如果短语是“出现了 super-duper-xl”,那么序列将是:

[the,superduperxl,super,duper,xl,emerged]

这确实短语匹配“superduperxl出现”,但是如果部分令牌(super,duper,xl)没有发出,它

有什么方法可以连接单词,只保留连接的单词并过滤掉单词部分?

【问题讨论】:

    标签: elasticsearch string-concatenation


    【解决方案1】:

    Pattern replace 字符过滤器可以在这里使用。

    “-”替换为“”生成token

    查询

    PUT my-index1
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "remove_hyphen_analyzer": {
              "tokenizer": "standard",
              "char_filter": [
                "remove_hyphen_filter"
              ]
            }
          },
          "char_filter": {
            "remove_hyphen_filter": {
              "type": "pattern_replace",
              "pattern": "-",
              "replacement": ""
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "title":{
            "type": "text",
            "analyzer": "remove_hyphen_analyzer"
          }
           
        }
      }
    }
    
    POST my-index1/_analyze
    {
      "analyzer": "remove_hyphen_analyzer",
      "text": "the super-duper-xl emerged"
    }
    

    结果

    {
      "tokens" : [
        {
          "token" : "the",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "<ALPHANUM>",
          "position" : 0
        },
        {
          "token" : "superduperxl",
          "start_offset" : 4,
          "end_offset" : 18,
          "type" : "<ALPHANUM>",
          "position" : 1
        },
        {
          "token" : "emerged",
          "start_offset" : 19,
          "end_offset" : 26,
          "type" : "<ALPHANUM>",
          "position" : 2
        }
      ]
    }
    
    

    【讨论】:

    • 谢谢 - 我可以在 word_delimiter_graph 过滤器(没有连接)之后使用它来在单词被拆分后删除/替换字符吗?例如,我仍然希望在单词/数字边界上进行基本拆分。
    • @aaa90210 是的,你可以 ex."remove_hyphen_analyzer": { "tokenizer": "standard", "char_filter": [ "remove_hyphen_filter" ], "filter":"word_delimiter_graph" }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多