首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在elasticsearch中应用同义词查找精确值

在elasticsearch中应用同义词查找精确值
EN

Stack Overflow用户
提问于 2016-07-20 16:57:01
回答 1查看 98关注 0票数 0

我为某些字段设置了同义词,但是我希望将其应用于映射到not_analyzed的字段。

例如,我让字段foo存储seksyen 10,它是not_analyzed,并且为seksyen, section添加了一个同义词条目(处理文档中的混合语言)。

代码语言:javascript
复制
'foo': {'type': 'string', 'index': 'not_analyzed'}

假设用户发出一个查询

代码语言:javascript
复制
{"term": {"foo": "section 10"}}

并期待与seksyen 10section 10一起使用foo。但是,使用当前的映射,我不能在给定查询的情况下返回seksyen 10。另外,我在这里执行过滤查询,因为我不希望返回这些查询

代码语言:javascript
复制
whatever seksyen 10
seksyen 10, something
whatever section 10 something

我只希望将同义词扩展应用于查询,而不是在查询中指定它。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2016-07-20 18:50:30

首先,使用term不会对搜索到的文本进行任何分析,因此您需要一种不同类型的查询。

你可以像下面这样做:

代码语言:javascript
复制
{
  "mappings": {
    "test": {
      "properties": {
        "foo": {
          "type": "string",
          "index": "not_analyzed",
          "search_analyzer": "synonym"
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "synonym": {
          "tokenizer": "whitespace",
          "filter": [
            "synonym"
          ]
        }
      },
      "filter": {
        "synonym": {
          "type": "synonym",
          "synonyms": [
            "seksyen, section"
          ]
        }
      }
    }
  }
}

因此,您定义了一个仅在搜索时使用的search_analyzer。然后你需要放弃term过滤器,否则它将无法工作:

代码语言:javascript
复制
{
  "query": {
    "match": {
      "foo": "section"
    }
  }
}

上面的解决方案在ES 1.x中有效。在ES 2.x中,search_analyzernot_analyzed字段将不再可能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38476721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档