当前位置: 首页 > 面试题库 >

ElasticSearch n-gram令牌过滤器未找到部分单词

邵星光
2023-03-14
问题内容

我一直在与ElasticSearch一起玩我的一个新项目。我已将默认分析器设置为使用ngram
tokenfilter。这是我的elasticsearch.yml文件:

index:
analysis:
    analyzer:
        default_index:
            tokenizer: standard
            filter: [standard, stop, mynGram]
        default_search:
            tokenizer: standard
            filter: [standard, stop]

    filter:
        mynGram:
            type: nGram
            min_gram: 1
            max_gram: 10

我创建了一个新索引并向其中添加了以下文档:

$ curl -XPUT http://localhost:9200/test/newtype/3 -d '{"text": "one two three four five six"}'
{"ok":true,"_index":"test","_type":"newtype","_id":"3"}

但是,当我使用查询text:hreetext:ive任何其他部分术语进行搜索时,ElasticSearch不会返回此文档。仅当我搜索确切的字词(如text:two)时,它才会返回文档。

我还尝试过更改配置文件,以便default_search也使用ngram令牌过滤器,但结果是相同的。我在这里做错什么,如何纠正?


问题答案:

不确定default_ *设置。但是应用指定index_analyzer和search_analyzer的映射有效:

curl -XDELETE localhost:9200/twitter
curl -XPOST localhost:9200/twitter -d '
{"index": 
  { "number_of_shards": 1,
    "analysis": {
       "filter": {
                  "mynGram" : {"type": "nGram", "min_gram": 2, "max_gram": 10}
                 },
       "analyzer": { "a1" : {
                    "type":"custom",
                    "tokenizer": "standard",
                    "filter": ["lowercase", "mynGram"]
                    }
                  } 
     }
  }
}
}'

curl -XPUT localhost:9200/twitter/tweet/_mapping -d '{
    "tweet" : {
        "index_analyzer" : "a1",
        "search_analyzer" : "standard", 
        "date_formats" : ["yyyy-MM-dd", "dd-MM-yyyy"],
        "properties" : {
            "user": {"type":"string", "analyzer":"standard"},
            "message" : {"type" : "string" }
        }
    }}'

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'

curl -XGET localhost:9200/twitter/_search?q=ear
curl -XGET localhost:9200/twitter/_search?q=sea

curl -XGET localhost:9200/twitter/_mapping


 类似资料:
  • 问题内容: 我正在尝试使用Elasticsearch来实现自动完成功能,因为我知道该怎么做… 我正在尝试在索引已爬网数据时使用ES的edge_n_grams建立多词(短语)建议。 a 和a 之间有什么区别-我已经阅读了有关这些文档,但仍需要更多了解…。 例如,token_filter是ES用来针对用户输入进行搜索的内容吗?ES用于制作令牌的令牌生成器是吗?什么是代币? ES是否可以使用其中任何一种

  • 因此,从本页的文档来看,似乎我可以用令牌生成器、令牌过滤器和字符过滤器构建一个自定义瞬态分析器,并使用Analyze API对我的示例文本进行测试。 目标是,我想看看同义词令牌过滤器是否满足我的需求,即哪些术语被标记为同义词,哪些不满足。 但是当我这么做的时候 curl-XGET'localhost:9200/u分析?char\u filters=html\u条 我得到的不是结果,而是 知道我做错

  • 主要内容:Apache Ant令牌过滤器示例令牌过滤器允许我们在复制时过滤文件中的数据。 要进行过滤,需要使用一个必须与过滤器任务中的设置匹配的标记。 任务使用作为标记分隔符。 为了实现此功能,Apache Ant提供了使用属性的。 此功能仅应与文本文件一起使用。下面来看看Apache Ant令牌过滤器属性: 属性 描述 必要 它是没有分隔符字符(@)的标记字符串。 Y 这是一个字符串,应该在复制文件时替换令牌。 Y 必须从中读取过滤器的文

  • 问题内容: 由于我是elasticsearch的新手,因此我无法识别 ngram令牌过滤器 和 edge ngram令牌过滤器 之间的 区别 。 两者在处理令牌方面有何不同? 问题答案: 我认为文档对此非常清楚: 该标记器与nGram非常相似,但仅保留从标记开头开始的n-gram。 标记器的最佳示例再次来自文档: 使用此标记生成器定义: 简而言之: 令牌生成器将根据令牌的配置来创建令牌。在这个例子

  • 我用的是角度和节点。js与Auth0一起登录。我正在使用《快速入门指南》启动API。这是我使用Auth0 API的后端。 使用Auth0通用登录登录后,我会尝试访问我的后端,查看我是否获得授权。 这是检查我是否被授权的代码。 注意,我没有传递任何东西(我想我需要传递,但Auth0指南没有告诉我)。 在检查我是否被授权后,我得到一个错误,没有找到授权令牌。不知道我在这里干什么。我的后端是否未正确连接

  • 我在Elasticsearch 7.10中创建了一个索引,如下所示: 如您所见,我配置了一个名为my_analyzer的自定义分析器,该分析器应用了令牌过滤器。基于文档,我希望这个过滤器在索引时从文档的所有类型属性中删除英语stopwords。 事实上,如果我向http://localhost:30200/my_index/_analyze使用此请求主体: 我得到一个响应,表明令牌、、和已从提供的