首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索中的相对词匹配

弹性搜索中的相对词匹配
EN

Stack Overflow用户
提问于 2016-02-03 22:45:54
回答 3查看 148关注 0票数 0

这是Elastic搜索的新手,下面是我试图实现的目标,即任何与查询字符串相对匹配的内容都应该返回结果

如下所示创建示例索引

代码语言:javascript
复制
curl -XPUT 'http://localhost:9200/prj1/mod/java' -d '{
    "project_name": "Java_SE"
}'

curl -XPUT 'http://localhost:9200/prj1/mod/java2Ed' -d '{
    "project_name": "Java 2 Edition"
}'

curl -XPUT 'http://localhost:9200/prj1/mod/javaee' -d '{
    "project_name": "Java_EE"
}'

搜索时

代码语言:javascript
复制
curl -XGET 'http://localhost:9200/prj1/mod/_search' -d '{"query" : {"match" : {"project_name" : "Java"}}}'

返回结果下方

代码语言:javascript
复制
{"took":6,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.15342641,"hits":[{"_index":"prj1","_type":"mod","_id":"java2Ed","_score":0.15342641,"_source":{
"project_name": "Java 2 Edition"
}}]}}

它不会返回名称为"Java_SE“、”Java2Edition“和"Java_EE”的所有项目。

我需要得到它找到的一切与匹配文本“示例”我可以有这样的数据在我的文本以及

这是一个example_code这个例子:11是一个很好的例子你正在寻找的例子是不可用的。

我在这里做错了什么。

EN

回答 3

Stack Overflow用户

发布于 2016-02-03 23:13:10

您需要使用edge ngram filter来解决此问题。使用以下设置创建索引

代码语言:javascript
复制
PUT prj1
{
  "settings": {
    "analysis": {
      "filter": {
        "ngram_filter": {
          "type": "edgeNGram",
          "min_gram": 2,
          "max_gram": 8
        }
      },
      "analyzer": {
        "relative": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "ngram_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "mod": {
      "properties": {
        "project_name": {
          "type": "string",
          "analyzer": "relative",
          "search_analyzer": "standard"
        }
      }
    }
  }
}

所以java_se将会有令牌ja、jav、java等等,你的match query就可以工作了。

多亏了@sean,你将需要使用ngram filter来表示complete_java_book,my_java_applet等单词。如果你使用_作为项目名称的命名约定,你可能会考虑打破_中的单词,不是吗?

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2016-02-03 22:57:14

这是因为,默认情况下,elasticsearch将使用standard tokenizer,它不会拆分下划线"_“字符上的文本。因此,当您执行搜索时,您搜索的是只有文档java2ED具有标记的"java“标记。

票数 0
EN

Stack Overflow用户

发布于 2016-02-04 01:25:52

您也可以使用query_string

代码语言:javascript
复制
curl -XGET 'http://localhost:9200/prj1/mod/_search' -d '{"query" : {"query_string" : {"project_name" : "*Java*"}}}'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35180108

复制
相关文章

相似问题

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