我正在使用edge 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 2014A
,Labson PLO LTD 2014-I
,Labson 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
,但出于某种原因,它似乎没有索引令牌中的数字。让我知道,如果我错过了什么东西在这里。
在您的autocomplete\u搜索中
使用的是lowercase
tokinzer。它同时执行字母标记器
和小写标记过滤器
的功能。
https://www.elastic.co/guide/en/elasticsearch/reference/2.3//analysis-lowercase-tokenizer.html
现在让我们看看字母标记器
的作用。
每当遇到非字母字符时,字母标记器就会将文本分解为术语。
https://www.elastic.co/guide/en/elasticsearch/reference/master/analysis-letter-tokenizer.html
所以在你的情况下,当你询问。
“查询”:“Labson PLO 2014A”,
这个查询实际上变成了
“标题:拉布森标题:巴解组织标题:a”
自2014年字母标记器下降以来。现在,索引标记不包含仅包含字母
a
的标记。这就是你没有得到任何结果的原因。
你可以在kibana中这样分析你的查询
POST my_index/_validate/query?explain
{
"query": {
"match": {
"title": {
"query": "Labson PLO 2014a",
"operator": "and"
}
}
}
}
你会看到2014年正在下降。从最后的查询。
还要查看字母标记器生成的内容,请使用以下查询
POST _analyze
{
"tokenizer": "letter",
"text": "Labson PLO LTD 2014a"
}
我使用ElasticSearch对数据库进行索引。我试图使用edgeNGram标记器切割字符串,以射出要求“新字符串必须长于4个字符”的字符串。我使用以下代码创建索引: 现在我运行test来查看结果 并得到结果
最大ngram 36 在速度和内存方面,这会得到真正糟糕的加班吗?有没有更好的方法来部分搜索UUID?例如,我有7e222584-0818-49b0-875b-2774f4bf939b,我希望能够使用9b0搜索它
这是我的结果源看起来的样子。 {“script”:{“inline”:“ctx._source.name='Where's My Crown”“,”lang“:”painless“},”query“:{”match“:{”movie_id“:69}}} 但我有一个错误: {“type”:“illegal_argument_exception”,“reason”:“意外标记['s']应为[{,‘;’
基数聚合计算不同值的近似计数。但是,为什么即使对于存储在单个碎片中的索引,它也显示不正确的值呢?
我已经将弹性搜索1.7.1与spring应用程序集成在一起。我有一个cron作业,它在每次运行时更新弹性搜索的索引。我遵循了github上的各种示例代码来使其工作。首先,我为索引目的自动连接了ElasticSearchOperations: 然后以以下方式执行内部循环索引 当我第一次运行它时,它就像预期的那样工作。我已经在config文件夹中的elasticsearch.yml中将cluster重
我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢