Elasticsearch æ¥æ¬èªã§ãã¬ã¼ãºæ¤ç´¢ãå¿ è¦ãªãã
æ¥æ¬èªã§æ¤ç´¢ããéã«æ¤ç´¢çµæãç°æ§ã«è¨ããçç±ã¨ãæ£ç¢ºã«ãããããããå ´åã®æ¹æ³
Elasticsearch ã¯ã¨ãªã¼ã®ããã©ã«ãã®ãªãã¬ã¼ã¿ã¼ã¯ OR ã§ããããèªä½ã¯åé¡ãªãã®ã§ããããã®ORãé©ç¨ãããã¿ã¤ãã³ã°ãã¨ã¦ãéåæ â¦ ã
ã©ãããããªã¯ã¨ã¹ãããåèªãï¼åèªã§ãã¢ãã©ã¤ã¶ã¼ã§è§£æãããåå²ãããæå°åèªåä½ã§ORã§æ¤ç´¢ãããã¿ããï¼
ã©ãããäºãã¨è¨ãã¨ããã¼ã¯ã¼ãï¼ãæ±äº¬é½ã ã§æ¤ç´¢ããå ´åãã¢ãã©ã¤ãºå¾ããæ±äº¬ã 㨠ãé½ã ã®ï¼åèªã«ãã¼ã¯ãã¤ãºãããæ¤ç´¢ã¯ ãæ±äº¬ OR é½ãã§æ¤ç´¢ãããåãããã¦ããããã§ãã
ãã¡ãããã®å ´åããæ±äº¬é½ããå«ãã§ããããã¥ã¡ã³ããããããã¾ããããæ±äº¬ãã ãããé½ãã ããã¾ãã¯ããæ±äº¬ ⦠é½ããé½ â¦ æ±äº¬ããªã©ã®åèªãé¢ãã¦ããããã¥ã¡ã³ãã«ããããããå¯è½æ§ãããã¾ãã
ãããã調ã¹ã¦ããã¾ãè¦å½ããããã¿ããªã©ããã¦ãããã ããï¼å½ããåã®ä»æ§ãªã®ãï¼ãã®åãéåæããããã§ãã
ããã©ã«ãã®ä»æ§ã確èª
ä»åã¯ãé½éåºçåã使ã£ã¦åä½ã®ç¢ºèªããã¾ãã
ãã¼ã¿ã®æºåï¼
次ã®ã³ãã³ãã§ãpref_name ã¨è¨ãä¸ã¤ã®ãã£ã¼ã«ãããã¤ï¼ï¼é½éåºçåã®ãã¼ã¿ã使ãã¾ããåä½ã®ç¢ºèªã«ã¯ããã©ã«ãã®ã¢ãã©ã¤ã¶ã¼ã§ååãªã®ã§ãç¹ã«ã«ã¹ã¿ãã¤ãºãã¦ãã¾ããã
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "åæµ·é" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "鿣®ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "岩æç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å®®åç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ç§ç°ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "山形ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ç¦å³¶ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "è¨åç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æ æ¨ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "群馬ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å¼çç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "åèç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æ±äº¬é½" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ç¥å¥å·ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æ°æ½ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å¯å±±ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ç³å·ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ç¦äºç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "山梨ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "é·éç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å²éç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "é岡ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æç¥ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ä¸éç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æ»è³ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "京é½åº" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "大éªåº" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å
µåº«ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å¥è¯ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "åæå±±ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "é³¥åç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å³¶æ ¹ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "岡山ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "åºå³¶ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å±±å£ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "徳島ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "é¦å·ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æåªç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "é«ç¥ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ç¦å²¡ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "ä½è³ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "é·å´ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "çæ¬ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "大åç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "å®®å´ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "鹿å
å³¶ç" }'
curl -XPOST 'localhost:9200/test/type/' -d '{ "pref_name" : "æ²ç¸ç" }'
ã¢ãã©ã¤ã¶ã¼ã®è§£æçµæç¢ºèªï¼
ã¾ãã¯ã_analyze API ã使ç¨ãã¦ãæ¥æ¬èªãã©ã®ããã«è§£æãããã確èªãã¦ã¿ã¾ãã
$ curl -s 'localhost:9200/test/_analyze?field=type.pref_name&pretty' -d '群馬ç'|jq ".tokens[].token"
"群"
"馬"
"ç"$ curl -s 'localhost:9200/test/_analyze?field=type.pref_name&pretty' -d 'æ±äº¬é½'|jq ".tokens[].token"
"æ±"
"京"
"é½"
ããã©ã«ãã®ã¢ãã©ã¤ã¶ã¼ã使ç¨ãã¦ããã®ã§ãå¥éºã«ï¼æååä½ã«åããã¦ããã®ã確èªã§ãã¾ãã
ãæ±äº¬é½ãã§æ¤ç´¢ãªã¯ã¨ã¹ãï¼
ã¾ãã¯ãã¼ã·ãã¯ã«ãæ±äº¬é½ãã§æ¤ç´¢ãã¦ã¿ã¾ãã
curl -s 'localhost:9200/test/type/_search?pretty' -d '
{
"query":{
"query_string":{
"default_field" : "pref_name",
"query":"æ±äº¬é½"
}
}
}' | jq ".hits.hits[]|{score: ._score, pref_name: ._source.pref_name}"
ãæ±äº¬é½ãã®æ¤ç´¢çµæï¼
ï¼ä»¶ããã£ã¦ãã¾ãããä¸å¿ã¹ã³ã¢ã¯ããæ±äº¬é½ãã®æ¹ãé«ããªã£ã¦ãã¾ãããã京é½åºããããããã¦ãã¾ããããããããæ±äº¬é½ããï¼æåæ¯ã«åå²ããORæ¤ç´¢ãã¦ããã¨èãããã¾ãããæ± OR 京 OR é½ã
{
"pref_name": "æ±äº¬é½",
"score": 2.551233
}
{
"pref_name": "京é½åº",
"score": 0.7797127
}
ãé½äº¬æ±ãã§æ¤ç´¢ãªã¯ã¨ã¹ãï¼
ãæ± OR 京 OR é½ãã§æ¤ç´¢ããã¦ãããªãããæ±äº¬é½ãã®æåãå ¥ãæ¿ãã¦ãåãçµæã«ãªãã¯ãã§ãã
curl -s 'localhost:9200/test/type/_search?pretty' -d '
{
"query":{
"query_string":{
"default_field" : "pref_name",
"query":"é½äº¬æ±"
}
}
}' | jq ".hits.hits[]|{score: ._score, pref_name: ._source.pref_name}"
ãé½äº¬æ±ãã®æ¤ç´¢çµæï¼
å ã»ã©ã®ãæ±äº¬é½ãã§æ¤ç´¢ããçµæã¨ãããããããã¥ã¡ã³ããã¹ã³ã¢ãå ¨ãåãã§ãã
{
"pref_name": "æ±äº¬é½",
"score": 2.551233
}
{
"pref_name": "京é½åº",
"score": 0.7797127
}
ãæ± OR 京 OR é½ãã§æ¤ç´¢ãªã¯ã¨ã¹ãï¼
ãã¤ããã§ããããã£ãã®ãã¨ãæ± OR 京 OR é½ãã§æ¤ç´¢ãã¦ã¿ã¾ãããããä»ã¾ã§ã®çµæã¨å ¨ãåãã«ãªãã¯ãã§ãã
curl -s 'localhost:9200/test/type/_search?pretty' -d '
{
"query":{
"query_string":{
"default_field" : "pref_name",
"query":"æ± OR 京 OR é½"
}
}
}' | jq ".hits.hits[]|{score: ._score, pref_name: ._source.pref_name}"
ãæ± OR 京 OR é½ãã®æ¤ç´¢çµæï¼
ãã¯ããä»ã¾ã§ã¨å ¨ãåãçµæã§ããã
{
"pref_name": "æ±äº¬é½",
"score": 2.551233
}
{
"pref_name": "京é½åº",
"score": 0.7797127
}
以ä¸ã®ãã¨ããã
ãã£ã±ãããªã¯ã¨ã¹ãããåèªãï¼åèªã§ãã¢ãã©ã¤ã¶ã¼ã§è§£æãããåå²ãããæå°åèªåä½ã§ORã§æ¤ç´¢ããã¦ãã¾ããï¼
æ¤ç´¢çµæã®è©³ç´°ã確èªããæ¹æ³ï¼explainï¼
ããã¤ãã®ãã¿ã¼ã³ãæ¤è¨¼ãã¦ãæ¤ç´¢ã«ãããããå 容ã確èªãã¾ãããããããªãã¨ããªãã¦ããexplain ãªãã·ã§ã³ ã使ã£ã¦ããã¼ã¯ã¼ãã®ãããããå ´æãã¹ã³ã¢ãªã³ã°ãªã©ã®è©³ç´°ãç°¡åã«ç¢ºèªãããã¨ãåºæ¥ã¾ãã
詳細ã確èªãããã¯ã¨ãªã« explain ãªãã·ã§ã³ã true ã«è¨å®ããã ãã§ãã
$ curl 'localhost:9200/test/type/_search?pretty' -d '
{
"explain": true,
"query":{
"query_string":{
"default_field" : "pref_name",
"query":"æ±äº¬é½"
}
}
}'
å ¨çµæã®å 容ã¯é·ããªã£ã¦ãã¾ãã®ã§çç¥ãã¾ãããæ¬¡ã®çµæã®ããã«ï¼æåæ¯ã«ããããã¦ããã®ã確èªã§ãã¾ãã
{
...
"description" : "weight(pref_name:æ± in 6) [PerFieldSimilarity], result of:",
...
"description" : "weight(pref_name:京 in 6) [PerFieldSimilarity], result of:",
...
"description" : "weight(pref_name:é½ in 6) [PerFieldSimilarity], result of:",
...
}
åèï¼
Search Request ExplainãExplain API
æ£ç¢ºã«ãããããããå ´åã¯ãã¬ã¼ãºæ¤ç´¢
ä¸è¨ã®ä¾ã¯ããã©ã«ãã®ã¢ãã©ã¤ã¶ã¼ã使ç¨ãã¦ããã®ã§ãï¼æååä½ã¨æ¥µç«¯ãªä¾ã§ãããkuromoji ãªã©ã®å½¢æ ç´ è§£æãNã°ã©ã ã使ç¨ããå ´åã§ããæååã®åå²åä½ã¯éãã©åããããªåãããã¾ãã®ã§ãæ£ç¢ºã«ããããããã«ã¯ãã¬ã¼ãºã§æ¤ç´¢ããæ¹æ³ãããã¾ãã
注æï¼å½¢æ ç´ è§£æã使ç¨ãã¦ããå ´åãæ£ç¢ºã«ãããã¨è¡ã£ã¦ããå ¥åããããã¼ã¯ã¼ãã¨ãæ¤ç´¢ããã¥ã¡ã³ãå ã®åèªã®åºç¾å ´æã«ãã£ã¦ã¯ãåèªã®åå²ã®ããæ¹ãç°ãªãã°ãããããªããã¨ãããã¾ãã®ã§ã注æãã
ãã¬ã¼ãºã§ç°¡åã«æ¤ç´¢ããã«ã¯ã次ã®ä¾ã®ããã«ããã«ã¯ã©ã¼ãã¼ã·ã§ã³ã§åèªãå²ã¿ã¾ãã
curl -s 'localhost:9200/test/type/_search?pretty' -d '
{
"explain": true,
"query":{
"query_string":{
"default_field" : "pref_name",
"query":"\"æ±äº¬é½\""
}
}
}'
NOTEï¼JSONå½¢å¼ãªã®ã§ãããã«ã¯ã©ã¼ãã¼ã·ã§ã³ã¯ãããã¯ã¹ã©ãã·ã¥ã§ã¨ã¹ã±ã¼ããã¾ãã
explain æå¹ã«ãã¦ããã°ããã¬ã¼ãºã§ããããã¦ãããã¨ã確èªã§ãã¾ãããã¡ãããã®ã¨ãã®æ¤ç´¢çµæã¯ããæ±äº¬é½ãã®ï¼ä»¶ã®ã¿ã§ãã
{
...
"description" : "weight(pref_name:\"æ± äº¬ é½\" in 6) [PerFieldSimilarity], result of:",
...
}
ã¾ãããã¬ã¼ãºæ¤ç´¢ã«ãªã£ã¦ããã®ã§æåãå ¥ãæ¿ããã¨ãæå¾ éãæ¤ç´¢çµæã¯ï¼ä»¶ã«ãªãã¾ãã
è¤æ°ã®ãã¼ã¯ã¼ãã§ãã¡ããã¨æ©è½ãã¾ããæ¬¡ã®ä¾ã¯ãæ±äº¬é½ ã¾ã㯠群馬çãã§æ¤ç´¢ããä¾ã§ãããæ±äº¬é½ãã¨ã群馬çãã®ï¼ä»¶ã®ã¿ããããã¾ãã
curl -s 'localhost:9200/test/type/_search?pretty' -d '
{
"explain": true,
"query":{
"query_string":{
"default_field" : "pref_name",
"query":"\"æ±äº¬é½\" \"群馬ç\""
}
}
}'
ã¡ãªã¿ã«ãã®ã¯ã¨ãªããã¬ã¼ãºã§æ¤ç´¢ããªãã¨ï¼ï¼ä»¶ããããã¾ããä¸ä½ï¼ä»¶ã¯ãæ±äº¬é½ãã¨ã群馬çãã«ãªãã¾ãããã
ã¾ã¨ã
æ¤ç´¢ã¨ã³ã¸ã³ã¯æ¤ç´¢çµæã®ä¸ä½ã®ããã¥ã¡ã³ããéè¦ãªã®ã§ããããã®ä»æ§ãæªãããã§ã¯ãªãã§ãããç¥ããªãã¨ãããããã§ã ⦠ã
ãã¬ã¼ãºã§æ¤ç´¢ããªãæ¹ã便å©ãªã±ã¼ã¹ãããã¾ããããã¬ã¼ãºã§æ¤ç´¢ããã®ããããã©ã«ãã®ä»æ§ã§æ¤ç´¢ããã®ãã¯è¦ä»¶æ¬¡ç¬¬ã§ããã
Search Request Explain ã Explain API ãç¨æããã¦ããã®ã§ãæ¤ç´¢çµæããããããªã¨æã£ããããããã使ç¨ãã¦é½åº¦ç¢ºèªã§ããããã£ã±ãæ¤ç´¢ã¨ã³ã¸ã³ã¨è¨ããæ¥æ¬èªã£ã¦é£ããã§ãã