gpt4 book ai didi

elasticsearch - edge_ngram token 生成器在 Elasticsearch 中的问题

转载 作者:行者123 更新时间:2023-12-03 01:49:59 24 4
gpt4 key购买 nike

我正在使用边缘ngram分词器以提供部分匹配。
我的文件看起来像

Name
Labson series LTD 2014
Labson PLO LTD 2014A
Labson PLO LTD 2014-I
Labson PLO LTD. 2014-II

我的映射如下
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 40,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"title": {
"type": "string",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
}

PUT my_index/doc/1
{
"title": "Labson Series LTD 2014"
}

PUT my_index/doc/2
{
"title": "Labson PLO LTD 2014A"
}


PUT my_index/doc/3
{
"title": "Labson PLO LTD 2014-I"
}


PUT my_index/doc/4
{
"title": "Labson PLO LTD. 2014-II"
}

以下查询为我提供了3个正确的文档( Labson PLO LTD 2014ALabson PLO LTD 2014-ILabson PLO LTD. 2014-II)
GET my_index/_search
{
"query": {
"match": {
"title": {
"query": "labson plo",
"operator": "and"
}
}
}
}

但是当我输入 Labson PLO 2014A时,它给了我0个文档
GET my_index/_search
{
"query": {
"match": {
"title": {
"query": "Labson PLO 2014A",
"operator": "and"
}
}
}
}

我希望它返回1个文档 Labson PLO LTD 2014A,但是由于某种原因,它似乎没有索引 token 中的数字。让我知道我是否想念这里的东西。

最佳答案

autocomplete_search中,您正在使用lowercase tokeinzer。
一起执行Letter TokenizerLower Case Token Filter的功能。

https://www.elastic.co/guide/en/elasticsearch/reference/2.3//analysis-lowercase-tokenizer.html

现在让我们看看Letter Tokenizer的作用。

The letter tokenizer breaks text into terms whenever it encounters a character which is not a letter.



https://www.elastic.co/guide/en/elasticsearch/reference/master/analysis-letter-tokenizer.html

因此,在您查询的情况下。

"query": "Labson PLO 2014A",



查询实际上变成

"+title:labson +title:plo +title:a"



自从字母 token 生成器于2014年下降以来。现在您的索引 token 不包含仅带有字母 a的 token 。这就是为什么您没有得到任何结果的原因。

您可以在kibana中像这样分析您的查询
POST my_index/_validate/query?explain
{
"query": {
"match": {
"title": {
"query": "Labson PLO 2014a",
"operator": "and"
}
}
}
}

而且您会看到2014年即将下降。从最终查询。

另外,要查看字母 token 生成器产生的内容,请使用以下查询
POST _analyze
{
"tokenizer": "letter",
"text": "Labson PLO LTD 2014a"
}

关于elasticsearch - edge_ngram token 生成器在 Elasticsearch 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184822/

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