ElasticSearch中的单词匹配

时间:2016-04-28 03:41:56

标签: c# elasticsearch nest

这是我映射索引的方式。

 settings = new ConnectionSettings(pool)
              .DefaultIndex(defaultIndex)
              .MapDefaultTypeNames(m => m.Add(typeof(MyClass), "content"))
              .PrettyJson()
              .DisableDirectStreaming());

假设我有一个使用

索引到ES的文档
  内容:"蒂姆库克在财报电话会议上透露iPhone的销售情况   尽管该公司是第一家公司,但印度每年增长56%   全球销售额在13年内下滑。"

现在,如果用户使用匹配查询搜索单词

{
  "query": {
    "match": {
      "answer": {
        "query": "decline"
      }
    }
}}

说我的得分为0.047。

但是使用相同的查询,如果我搜索单词 "拒绝" ,我会得到0分。我想检查一下这个词是否部分存在于文件中。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您需要通过声明特定分析器来分析您的内容字段来定义字段映射。在这种情况下,我们可以使用english language analyzer根据英语语法和词汇规则来阻止令牌。

PUT your_index
{
  "mappings": {
    "your_type": {
      "properties": {
        "content": {
          "type": "string",
          "analyzer": "english"
        }
      }
    }
  }
}

然后您可以索引您的内容

PUT /your_index/your_type/1
{
  "content": "Tim Cook revealed during the earnings call that iPhone sales in India grew by 56% on a yearly basis, despite the company's first global sales decline in 13 years."
}

最后,您可以同时搜索declinedeclining并获得相同的分数

POST /your_index/_search 
{
  "query": {
    "match": {
      "content": {
        "query": "decline"
      }
    }
  }
}

POST /your_index/_search 
{
  "query": {
    "match": {
      "content": {
        "query": "declining"
      }
    }
  }
}