首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elasticsearch中,为什么这个使用自定义分析器的示例会失败?

在Elasticsearch中,为什么这个使用自定义分析器的示例会失败?
EN

Stack Overflow用户
提问于 2014-04-25 14:26:41
回答 2查看 7.6K关注 0票数 9

我把我的问题重新写成了一个完整的卷曲娱乐剧本。这样可能更容易再现问题(自定义分析器搜索失败)。我使用的是最新的ES版本。

删除旧数据

代码语言:javascript
复制
curl -XDELETE "http://localhost:9200/test_shingling"

用设置创建索引

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/" -d '{
  "settings": {
    "index": {
      "number_of_shards": 10,
      "number_of_replicas": 1
    },
    "analysis": {
      "analyzer": {
        "ShingleAnalyzer": {
          "tokenizer": "BreadcrumbPatternAnalyzer",
          "filter": [
            "standard",
            "lowercase",
            "filter_stemmer",
            "filter_shingle"
          ]
        }
      },
      "filter": {
        "filter_shingle": {
          "type": "shingle",
          "max_shingle_size": 2,
          "min_shingle_size": 2,
          "output_unigrams": false
        },
        "filter_stemmer": {
          "type": "porter_stem",
          "language": "English"
        }
      },
      "tokenizer": {
        "BreadcrumbPatternAnalyzer": {
          "type": "pattern",
          "pattern": " |\\$\\$\\$"
        }
      }
    }
  }
}'

定义映射

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_mapping" -d '{
  "item": {
    "properties": {
      "Title": {
        "type": "string",
        "search_analyzer": "ShingleAnalyzer",
        "index_analyzer": "ShingleAnalyzer"
      }
    }
  }
}'

创建文档

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/" -d '{
  "Title":"Kyocera Solar Panel Test"
}'

测试分析器通行证

代码语言:javascript
复制
curl 'localhost:9200/test_shingling/_analyze?pretty=1&analyzer=ShingleAnalyzer' -d 'Kyocera Solar Panel Test'

等待ES被同步(也称为刷新索引)

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/_refresh"

搜索“京瓷太阳能电池板测试”失败

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
  "query": {
    "term": {
      "Title": "Kyocera Solar Panel Test"
    }
  }
}'

搜索“太阳能电池板”失败

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
  "query": {
    "term": {
      "Title": "Kyocera Solar Panel Test"
    }
  }
}'

搜索“京瓷太阳能电池板测试”失败

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
  "query": {
    "query_string": {
      "default_field": "Title",
      "query": "Kyocera Solar Panel Test"
    }
  }
}'

搜索“太阳能电池板”失败

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
  "query": {
    "query_string": {
      "default_field": "Title",
      "query": "solar panel"
    }
  }
}'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-28 07:04:03

术语查询将搜索完全匹配的内容,而不会将ShingleAnalyzer应用于查询。

因此,您必须使用匹配查询,这将应用分析器到您的查询字符串时,搜索。

全词搜索

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search" -d'{
    "query": {
        "match": {
            "Title": "Kyocera Solar Panel Test"
        }
    }
}'

部分词搜索

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search" -d'{
    "query": {
        "match": {
            "Title": "Panel Test"
        }
    }
}'

另一个部分单词搜索

代码语言:javascript
复制
curl -XPOST "http://localhost:9200/test_shingling/item/_search" -d'{
    "query": {
        "match": {
            "Title": "Solar Panel Test"
        }
    }
}'

希望能帮上忙!

票数 5
EN

Stack Overflow用户

发布于 2014-04-27 16:18:56

我认为搜索query_string默认认为solar panelsolarpanel,您必须在query_string中显式地设置它。这就是参考指南中所写的内容。

default_operator: 如果未指定显式运算符,则使用默认运算符。例如,对于OR的默认运算符,匈牙利的查询首都被转换为OR匈牙利的大写或,而对于默认的运算符AND,同样的查询被转换为same和of和匈牙利。默认值是OR。

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

https://stackoverflow.com/questions/23295896

复制
相关文章

相似问题

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