Elasticsearch에서 match_phrase_prefix 쿼리를 사용할 때 특히 쿼리가 한 단어 뒤에 하나의 문자 인 경우 예상되는 모든 결과가 반환되지 않는 문제가 있습니다. .Elasticsearch match phrase prefix가 모든 조건과 일치하지 않음
http://localhost:9200/test/drinks/_mapping
반환 : 다른 기록의
{
"test": {
"mappings": {
"drinks": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
}
와의 사이에
수백만이 있습니다{
"_index": "test",
"_type": "drinks",
"_id": "2",
"_score": 1,
"_source": {
"name": "Johnnie Walker Black Label"
}
},
{
"_index": "test",
"_type": "drinks",
"_id": "1",
"_score": 1,
"_source": {
"name": "Johnnie Walker Blue Label"
}
}
(이 중요한 데이터를 보호하기 위해 인위적인 예입니다)이 인덱스 매핑을 가지고
한 단어 뒤에 두 글자가 오는 다음 쿼리는
0입니다.개POST http://localhost:9200/test/drinks/_search
{
"query": {
"match_phrase_prefix" : {
"name" : "Walker Bl"
}
}
}
반환이 :
POST http://localhost:9200/test/drinks/_search
{
"query": {
"match_phrase_prefix" : {
"name" : "Walker B"
}
}
}
결과를 반환하지 않습니다 : 한 단어와 하나 개의 문자로이 쿼리 반면
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.5753642,
"hits": [
{
"_index": "test",
"_type": "drinks",
"_id": "2",
"_score": 0.5753642,
"_source": {
"name": "Johnnie Walker Black Label"
}
},
{
"_index": "test",
"_type": "drinks",
"_id": "1",
"_score": 0.5753642,
"_source": {
"name": "Johnnie Walker Blue Label"
}
}
]
}
}
. 여기서 무슨 일이 일어날 수 있니?
한 가지 질문으로 설명서에는 "빠른"다음에 "갈색"이 표시 될 것이라고 나와 있습니다. 그런 다음 elasticsearch가 "f"로 시작하고 "빠른"및 "갈색"순서로 앞에 오는 50 개의 (기본적으로) 용어를 찾습니다. 아니면 "f"로 시작하는 용어일까요?그리고 이전의 경우에, 적어도 (이 질문에서) "b"("파란색"과 "검정")로 시작하는 용어가 2 개 이상있는 경우 결과를 반환하지 않습니다. 처음 50 개 용어를 볼 것으로 예상했습니다. 적어도 그 두 가지 또는 다른 것들이 보여 져야합니다. 아니면 내가 틀렸어. – Jose
어쩌면 50 용어는 클러스터에서 사용하는 언어 (ES가 사용자 지정 언어를 지원하기 때문에)를 기반으로하는 사전에 내장 된 사전에서 나온 용어 일 뿐이고 색인에있는 다른 문서의 용어는 아닙니다. 이것은 왜 match_phrase_prefix querie에 대한 커스텀 매개 변수이고 "size"매개 변수를 사용하는 것과는 다른지를 설명합니다. – Rlarroque
제 경우에는 어떤 필드도 매핑에 대한 언어 속성을 가지고 있지 않습니다. 그리고 곧 새 편지를 소개하면 결과가 더 정확하게 표시됩니다. mult_match 질의''type ":"phrase_prefix "를 사용하고 있기 때문에'max_expansions' 매개 변수를 사용할 수 없습니다. – Jose