elasticsearch 全词搜索与弹性搜索,elasticsearch,elasticsearch" /> elasticsearch 全词搜索与弹性搜索,elasticsearch,elasticsearch" />

elasticsearch 全词搜索与弹性搜索

elasticsearch 全词搜索与弹性搜索,elasticsearch,elasticsearch,刚开始弹性搜索。并坚持第一个问题: 我的es索引中有以下字符串: “最爱”, “收藏夹\a1” 如果我只想先用 'query' => [ 'match' => [ 'name' => 'favourites' ] ], 或 两者都匹配。如何解决它?尝试在映射中使用,并在查询中使用a(或a) 例如,我可以设置一个简单的索引,如下所示: PUT /test_index { "mappings": { "doc": {

刚开始弹性搜索。并坚持第一个问题:

我的es索引中有以下字符串:

“最爱”, “收藏夹\a1”

如果我只想先用

'query' => [
    'match' => [
        'name' => 'favourites'
    ]
],

两者都匹配。如何解决它?

尝试在映射中使用,并在查询中使用a(或a)

例如,我可以设置一个简单的索引,如下所示:

PUT /test_index
{
    "mappings": {
        "doc": {
            "properties": {
                "name": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}
添加几个文档

POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"name": "favourites"}
{"index":{"_id":2}}
{"name": "favourites\\a1"}
然后此查询将仅返回第一个文档:

POST /test_index/_search
{
   "query": {
      "term": {
         "name": {
            "value": "favourites"
         }
      }
   }
}
...
{
   "took": 45,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 0.30685282,
      "hits": [
         {
            "_index": "test_index",
            "_type": "doc",
            "_id": "1",
            "_score": 0.30685282,
            "_source": {
               "name": "favourites"
            }
         }
      ]
   }
}
以下是我用于快速测试的一些代码:


Thx,非常有用!但是如果我需要保持搜索单词部分的能力呢?例如,我需要用关键字“Favorites”搜索“Favorites”和“Favorites\a1”。设置“not_analysis”(未分析)后,这将是不可能的,对吗?是的,如果使用
not_analysisd
,唯一的术语将是精确的文本。另一方面,标准分析器将拆分非字母数字字符(如“\”)上的标记。因此,您可能需要设置自己的自定义分析器。
POST /test_index/_search
{
   "query": {
      "term": {
         "name": {
            "value": "favourites"
         }
      }
   }
}
...
{
   "took": 45,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 0.30685282,
      "hits": [
         {
            "_index": "test_index",
            "_type": "doc",
            "_id": "1",
            "_score": 0.30685282,
            "_source": {
               "name": "favourites"
            }
         }
      ]
   }
}