首页 文章

在非标记化字段上使用同义词标记过滤器

提问于
浏览
0

假设我想使用edge-ngram技术进行自动完成(完成建议器对我来说不是一个好选择) . 我想用[“你”,“我们”,“我们”,“我们一个”,“我们的”,“我们的手臂”,“我们的军队”]来索引“我们的军队” .

问题是 - 我也有一个同义词列表 . 例如,“我们”是“美国”的同义词 . 我怎样才能将“我们的军队”分成“我们”和“军队”,找到他们的同义词并将它们重新组合在一起?

我尝试过这样的事情:

{
    "analysis": {
        "filter": {
            "ngram_prefix": {
                "type":     "edge_ngram",
                "min_gram": 1,
                "max_gram": 20
            },
            "custom_synonyms": {
                "type": "synonym",
                "tokenizer": "standard",
                "synonyms_path": "/my/synonym/path/synonyms.txt",
                "ignore_case": True
            }
        },
        "analyzer": {
            "synonym_ngram": {
                "type":      "custom",
                "tokenizer": "keyword",
                "filter": [
                    "custom_synonyms",
                    "lowercase",
                    "ngram_prefix",
                ],
                "char_filter": [],
            }
        }
    }
}

没有运气 .

有没有办法连接令牌?这样我就可以将一个条目分成标记,找到同义词并将标记连接在一起?

也许是一种方法来匹配_phrase并确保第一个令牌是位置0?

1 回答

  • 0

    你不能仅仅因为你有一个 keyword tokenizer而这样做 . 这个不会拆分文本,以便在每个术语的基础上识别同义词 . 由于 keywordterm 是全文 . 所以,除非你定义你的同义词,如 "us army,usa army,u s a army,united states of america army" ,我没有看到其他方式:

    "my_synonym_filter": {
          "tokenizer": "keyword",
          "type": "synonym",
          "synonyms": [
            "us army,usa army,u s a army,united states of america army"
          ]
        }
      }
    

相关问题