elasticsearch 如何在elasticsearch simple\u query\u字符串中包含除空格以外的所有字符?
我正在寻找elasticsearch中最简单的查询系统,其中唯一的分隔符是空格。我想用几乎所有类型的字符来查询用户名,例如@username或@u$er-na_me 它认为这很容易,但经过长时间的搜索后,我才找到了一个“空白”分析器:
elasticsearch 如何在elasticsearch simple\u query\u字符串中包含除空格以外的所有字符?,
elasticsearch,
elasticsearch,我正在寻找elasticsearch中最简单的查询系统,其中唯一的分隔符是空格。我想用几乎所有类型的字符来查询用户名,例如@username或@u$er-na_me 它认为这很容易,但经过长时间的搜索后,我才找到了一个“空白”分析器: query.json: { "query": { "simple_query_string" : { "query": "@username", "fields": ["mytextfield"], "a
query.json:
{
"query": {
"simple_query_string" : {
"query": "@username",
"fields": ["mytextfield"],
"analyzer": "whitespace",
"default_operator": "and"
}
}
}
我运行时使用:curl-X POST”http://localhost:9200/my.index/_search?pretty“-H”内容类型:application/json'-d'@query.json'
然而,它什么也不返回
其他详情:
仍然有效“查询”:“用户名”
- 如果我删除了
,那么我会得到与“分析器”:“空白”
和“查询”:“用户名”
“查询”:“@username”
- 我在SO(例如)中看到过类似的帖子,它们似乎创建了新的索引或映射。如果是这样的话,我将非常感谢您提供一些资源来了解工作流程
总之,是否有任何简单的方法可以配置elasticsearch或查询,使其仅使用空格(理想情况下是基本标点符号)进行标记化?toto____________________________________ 1) 使用单个分析字段创建索引:
PUT totoindex
{
"mappings": {
"_doc": {
"properties": {
"mytextfield":{"type":"text", "analyzer": "whitespace"}
}
}
}
}
2) 为一些示例文档编制索引:
POST totoindex/_doc/
{
"mytextfield": "@toto_tico"
}
POST totoindex/_doc/_search
{
"query": {
"simple_query_string" : {
"query": "@toto_tico",
"fields": ["mytextfield"]
}
}
}
3) 搜索文档:
POST totoindex/_doc/
{
"mytextfield": "@toto_tico"
}
POST totoindex/_doc/_search
{
"query": {
"simple_query_string" : {
"query": "@toto_tico",
"fields": ["mytextfield"]
}
}
}
答复:
{
"took": 12,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "totoindex",
"_type": "_doc",
"_id": "MtorKW8BavUEUOqEr6k_",
"_score": 0.2876821,
"_source": {
"mytextfield": "@toto_tico"
}
}
]
}
}
尽管@baitmbarek提供了问题的一般/快速答案,但它需要对问题有一些了解。因此,我将尝试从新手的角度为这个问题提供一个简单的答案 首先索引,然后搜索! 现在,我这么说;我觉得很明显。如果希望以某种方式进行搜索,则应以这种方式创建索引 一旦建立索引,就没有回头路了 并非绝对正确,您可以创建新索引,然后创建别名然而,从新手的角度来看,没有回头路通常是这样 熟悉弹性搜索术语 下面是这篇文章的列表:索引、文档、分析器、标记器、映射 当然有,还有 台阶
curl -XPUT localhost:9200/[MY_INDEX] -H 'Content-Type: application/json' -d'
{
"settings": {
"analysis": {
"tokenizer": {
"MY_TOKENIZER": {
"type": "char_group",
"tokenize_on_chars":["whitespace", "\n", ".", ",", ";", ":", "\"", "`", "]", "[", ")", "(", "!", "?", "/", "\\", "–", "<", "<", "|", "+", "=", "~", "-", "&", "%", "*", "^", "\u0027"]
}
},
"analyzer": {
"MY_ANALYZER": {
"type": "custom",
"filter" : ["lowercase"],
"tokenizer": "MY_TOKENIZER"
}
}
}
},
"mappings": {
"properties": {
"MY_TEXT_FIELD":{"type":"text", "analyzer": "MY_ANALYZER"}
}
}
}
'
MY_TEXT_字段
已使用MY_ANALYZER
编制索引,因此它知道如何进行搜索):[1] 老实说,弹性搜索的查询系统对新手非常友好(当然非常强大,但体积庞大,学习曲线陡峭),因此很容易忘记这里发生了什么。Elasticsearch是开箱即用的,后来你意识到开箱即用不是你所需要的。Hi@toto\u tico你能分享你的地图吗?你的字段是用空白分析器分析的吗?我几乎不理解你的问题,这让我觉得我没有用空白分析器分析字段。但是,这是有道理的
mytextfield
也需要事先进行分析:我读过一些关于标准分析器的文章,但对其进行更改并非易事。如何共享我的映射?同时,我已经计算出我想要使用的标记器是char\u group:“标记器”:{“type”:“char\u group”,“tokenize\u on\u chars:[“whitespace”,“\n”,“,”,“;”,“:”,“,“,”,“\”]
。我仍在想如何将所有这些放在一起,但ES有很多概念不容易理解。感谢@baitmbarek,我还了解到我无法更改当前索引,因此它应该是一个新的索引。实际上,我从未创建任何索引,我只是使用Monstach将数据从mongoDB迁移到elasticsearch。这创建了自动索引,我猜它使用默认的analyzer/tokenizer。这让我很清楚应该尝试什么,但我需要一段时间来整理这些东西(我正在处理大型mongo集合)。似乎我应该更改标记器而不是analyzer。
curl -XPOST localhost:9200/[MY_INDEX]/_doc/
{
"MY_TEXT_FIELD": "here is @toto_tico!"
}
curl -XPOST localhost:9200/MY_INDEX/_search
{
"query": {
"simple_query_string" : {
"query": "@toto_tico",
"fields": ["MY_TEXT_FIELD"]
}
}
}