复现步骤如下
创建一个索引,该索引有一个字段content,该字段使用自定义分词器my_custom_analyzer分词,my_custom_analyzer自定义分词器使用word_delimiter_graph过滤器,过滤器配置在custom_word_delimiter_graph_filter字段对应的值里
PUT test_index_demo
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
},
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"char_filter": [
"html_strip"
],
"tokenizer": "standard",
"filter": [
"custom_word_delimiter_graph_filter",
"lowercase"
]
}
},
"filter": {
"custom_word_delimiter_graph_filter": {
"type": "word_delimiter_graph",
"catenate_all": true,
"preserve_original": true,
"stem_english_possessive": true
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "my_custom_analyzer"
}
}
}
}
POST test_index_demo/_create/1
{"content":"这是文档1 onVideoDataCallback video 这是 callback"}
POST test_index_demo/_create/2
{"content":"能不能匹配到这里 video callback"}
GET /test_index_demo/_analyze
{
"field": "content",
"text": "OnVideoDataCallback"
}
POST test_index_demo/_search
{
"from": 0,
"size": 10,
"query" : {
"match": {
"content" : {
"query": "onVideoDataCallback"
}
}
},
"highlight": {
"fields": {
"content": {},
"title": {}
},
"fragment_size": 200
}
}
按理说分词是正确的,搜索结果却只包含完整单词的结果,该怎么做才能又包含部分驼峰中单词的结果?
先要更改索引设置,为my_custom_analyzer添加edge_ngram过滤器。
PUT test_index_demo
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
},
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"char_filter": [
"html_strip"
],
"tokenizer": "standard",
"filter": [
"custom_word_delimiter_graph_filter",
"lowercase",
"edge_ngram_filter"
]
}
},
"filter": {
"custom_word_delimiter_graph_filter": {
"type": "word_delimiter_graph",
"catenate_all": true,
"preserve_original": true,
"stem_english_possessive": true
},
"edge_ngram_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 50
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "my_custom_analyzer"
}
}
}
}
再用match查询:
POST test_index_demo/_search
{
"from": 0,
"size": 10,
"query": {
"match": {
"content": {
"query": "onVideoDataCallback"
}
}
},
"highlight": {
"fields": {
"content": {},
"title": {}
},
"fragment_size": 200
}
}
问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回
我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术
我正在使用ElasticSearch5,找不到以下问题的解决方案:我想在文档中搜索带斜杠的字符串(url的一部分)。但它不会返回匹配的文档。我读过一些东西,带斜线的字符串被ES拆分,这不是我想要的字段。我尝试用映射在字段上设置“not_analysis”,但似乎无法使其工作。 “创建索引”:Put http://localhost:9200/test “添加文档”:post http://loca
问题内容: 我最近开始使用ElasticSearch,但似乎无法让它搜索单词的一部分。 示例:我有我的ouchdb中的三个文档,在ElasticSearch中建立了索引: 所以现在,我要搜索包含“ Doe”的所有文档 那不会返回任何点击。但是如果我寻找 它确实返回一个文档(John Doeman)。 我尝试将不同的分析器和不同的过滤器设置为索引的属性。我也尝试使用完整的查询(例如: ),但似乎没有
假设我有一些文档,在名为“名称”的文本字段中包含以下值 文档1: 文档2: 文档3: 现在,假设我向ES发送一个简单的匹配查询,查询术语“组”: 我期望的结果是,无论术语出现的频率、出现的位置等,所有3个文档都会以相同的分数返回。现在,我已经知道,我可以通过将我的匹配项包装为常量分数来实现这一点,如下所示: 但是,假设我现在想使用搜索词abc组进行查询。在这种情况下,我希望Document2和Do
问题内容: 在索引中,我有一个IP字段。字段的类型为“ ip”。 我想搜索所有以“ 192.168”开头的IP 我所有的尝试都失败了,并显示以下消息: 无法解析IP [192.168],不是有效的IP地址 有没有办法做到这一点,还是应该将字段的类型更改为“字符串”? 谢谢。 问题答案: 您可以使用范围查询,例如: