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