gpt4 book ai didi

Elasticsearch:根据下划线拆分单词;搜索一无所获

转载 作者:行者123 更新时间:2023-11-29 02:51:43 25 4
gpt4 key购买 nike

我正在配置一个分词器,它通过下划线字符以及所有其他标点字符来拆分单词。我决定使用 word_delimiter为此过滤。然后我将我的分析器设置为所需字段的默认值。

我有两个问题:

  • Analyzer 将字符串拆分为单词,但不保留原始字符串,尽管有 preserve_original 选项。请参阅分析查询。
  • 按下划线分割的子字符串搜索仍然没有结果

这是我的模板、数据对象、分析器测试和搜索请求:

PUT simple
{
"template" : "simple",
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"underscore_splits_words" : {
"tokenizer" : "standard",
"filter" : ["word_delimiter"],
"generate_word_parts" : true,
"preserve_original" : true
}
}
}
},
"mappings": {
"_default_": {
"properties" : {
"request" : { "type" : "string", "analyzer" : "underscore_splits_words" }
}
}
}
}
}

数据对象:

POST simple/0 
{ "request" : "GET /queue/1/under_score-hyphenword/poll?ttl=300&limit=10" }

这会返回标记:“under”、“score”、“hyphenword”,但不会返回“underscore_splits_words”:

POST simple/_analyze?analyzer=underscore_splits_words
{"/queue/1/under_score-hyphenword/poll?ttl=300&limit=10"}

搜索结果

命中:

GET simple/_search?q=hyphenword

命中:

POST simple/_search
{
"query": {
"query_string": {
"query": "hyphenword"
}
}
}

小姐:

GET simple/_search?q=score

小姐:

POST simple/_search
{
"query": {
"query_string": {
"query": "score"
}
}
}

请建议一个正确的方法来实现我的目标。谢谢!

最佳答案

您应该能够使用“简单”分析器来实现这一点。不需要自定义分析器,因为简单分析器结合使用字母分词器和小写分词器(因此,任何非字母字符都表示一个新的分词)。你没有得到任何命中的原因是你没有在查询中指定字段,所以你查询的是_all字段,这主要是为了方便全文搜索。

创建索引

PUT myindex
{
"mappings": {
"mytype": {
"properties": {
"request": {
"type": "string",
"analyzer": "simple"
}
}
}
}
}

插入文档

POST myindex/mytype/1 
{ "request" : "GET /queue/1/key_word-hyphenword/poll?ttl=300&limit=10" }

查询文档

GET myindex/mytype/_search?q=request:key

使用查询 DSL 进行查询:

POST myindex/mytype/_search
{
"query": {
"query_string": {
"default_field": "request",
"query": "key"
}
}
}

另一个使用查询 DSL 的查询:

POST myindex/mytype/_search
{
"query": {
"bool": {
"must": [
{ "match": { "request": "key"}}
]
}
}
}

查询的输出看起来是正确的:

{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.095891505,
"hits": [
{
"_index": "myindex",
"_type": "mytype",
"_id": "1",
"_score": 0.095891505,
"_source": {
"request": "GET /queue/1/key_word-hyphenword/poll?ttl=300&limit=10"
}
}
]
}
}

如果您想省略正在搜索的特定字段(不推荐),您可以在创建索引时为索引中的所有映射设置默认分析器。 (请注意,此功能已弃用,出于性能/稳定性原因,您不应使用它。)

使用默认映射创建索引以使用“简单”分析器分析 _all 字段

PUT myindex
{
"mappings": {
"_default_": {
"index_analyzer": "simple"
}
}
}

插入文档

POST myindex/mytype/1 
{ "request" : "GET /queue/1/key_word-hyphenword/poll?ttl=300&limit=10" }

不指定字段查询索引

GET myindex/mytype/_search?q=key

您将得到相同的结果(1 次命中)。

关于Elasticsearch:根据下划线拆分单词;搜索一无所获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com