![](/img/trans.png)
[英]ElasticSearch - match_phrase_prefix query with synonyms
[英]elasticsearch match_phrase_prefix query not working with analyzer_startswith
我是Elasticsearch的新手,當我在單個字段上使用匹配短語前綴時,如果我在多個字段上使用匹配短語pefix,則它將不起作用。 為了搜索混合,121下面的查詢我得到的結果當feild3大於4位數時,我需要以1位數開頭的結果。 我的查詢看起來像這樣:
{
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"feild1": "p"
}
},
{
"bool": {
"must": [
{
"match_phrase_prefix": {
"feild2": {
"query": "HYBRID "
}
}
},
{
"match_phrase_prefix": {
"feild3": {
"query": "121"
}
}
}
]
}
}
]
}
},
"from": "0",
"size": "10"
}
feild3在數據庫中很長,我在加載數據時將long轉換為char。
我的映射:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"analyzer_startswith": {
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
},
"mappings": {
"pty": {
"properties": {
"feild2": {
"search_analyzer": "analyzer_startswith",
"analyzer": "analyzer_startswith",
"type": "string"
},
"feild3": {
"search_analyzer": "analyzer_startswith",
"analyzer": "analyzer_startswith",
"type": "string"
}
}
}
}
}
誰能幫助我擺脫困境。
對於您的用例。 您的映射應如下所示:
PUT index_name
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"analyzer_startswith": {
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
},
"mappings": {
"type_name": {
"properties": {
"field1": {
"analyzer": "analyzer_startswith",
"search_analyzer": "analyzer_startswith",
"type": "text"
},
"field2": {
"analyzer": "analyzer_startswith",
"search_analyzer": "analyzer_startswith",
"type": "text"
},
"field3": {
"analyzer": "analyzer_startswith",
"search_analyzer": "analyzer_startswith",
"type": "text"
}
}
}
}
}
樣本文件:
POST index_name/type_name
{
"field1":"hatim",
"field2":"stovewala",
"field3":"india"
}
查詢應該是這樣的:
GET index_name/type_name/_search
{
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"field1": "hat"
}
},
{
"bool": {
"must": [
{
"match_phrase_prefix": {
"field2": "s"
}
},
{
"match_phrase_prefix": {
"field3": "in"
}
}
]
}
}
]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.