elasticsearch多令牌关键字同义词

时间:2014-08-03 05:52:22

标签: elasticsearch synonym

我正在尝试在Elasticsearch中实现简单的多标记同义词,但是没有得到我期望的结果。这是一些卷曲:

curl -XPOST "http://localhost:9200/test" -d'
{
  "mappings": {
    "my_type": {
      "properties": {
        "blah": {
          "type": "string",
          "analyzer": "my_synonyms"
        }
      }
    }
  },
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_syn_filt": {
            "type": "synonym",
            "synonyms": [
              "foo bar, fooo bar"
            ]
          }
        },
        "analyzer": {
          "my_synonyms": {
            "filter": [
              "lowercase",
              "my_syn_filt"
            ],
            "tokenizer": "keyword"
          }
        }
      }
    }
  }
}'

索引一些文件:

curl -XPUT localhost:9200/test/my_type/1 -d '{"blah": "fooo bar"}'
curl -XPUT localhost:9200/test/my_type/2 -d '{"blah": "fooo barr"}'
curl -XPUT localhost:9200/test/my_type/3 -d '{"blah": "foo bar"}'

现在查询:

curl -XPOST "http://localhost:9200/test/_search" -d'
{
  "query": {
    "match": {
      "blah": "foo bar"
    }
  }
}'

我希望找回文件1和3,然而,只能回来3.有谁知道问题可能是什么?

经过进一步检查,我在直接调用分析仪时也没有得到预期的代币:

curl 'localhost:9200/test/_analyze?analyzer=my_synonyms' -d 'fooo bar'

当我期待两个标记时,只返回一个标记“fooo bar”:“fooo bar”和“foo bar”。

1 个答案:

答案 0 :(得分:1)

看起来如果您搜索了' fooo bar'相反,您将获得文档1和3.要获得您期望的结果,您将不得不翻转您的同义词术语以反过来:

" fooo bar => foo bar"

箭头告诉ES在右侧添加术语作为左侧所有术语的同义词。如果你想要它们是双向的,你可以简单地做“fooo bar,foo bar'并确保expand未明确设置为false。