如何用elasticsearch搜索单词的开头?

时间:2014-03-30 19:44:01

标签: elasticsearch

如何设置弹性搜索,允许我搜索部分单词或单词的开头。

当我运行以下脚本时,它找不到前缀' inte'除非我这样做,否则就会出现问题。

我无法弄清楚这里有什么问题!

echo "--- DELETING OLD INDEX ---"

curl -XDELETE 'http://localhost:9200/searchtest?pretty'

echo "--- CREATING INDEX ---"

curl -XPUT 'http://127.0.0.1:9200/searchtest/?pretty=1' -d '{
   "mappings" : {
      "mytype" : {
         "properties" : {
           "description": {
              "type": "string",
              "index_analyzer": "my_analyzer",
              "search_analyzer": "standard"
            }
         }
      }
   },
   "settings" : {
      "analysis" : {
         "analyzer" : {
            "my_analyzer" : {
               "filter" : [ "standard", "lowercase", "stop" ],
               "type" : "custom",
               "tokenizer" : "my_tokenizer"
            }
         },
         "tokenizer" : {
            "my_tokenizer" : {
               "side" : "front",
               "max_gram" : 200,
               "type" : "edgeNGram"
            }
         }
      }
   }
}'

echo "--- INSERTING RECORDS ---"

curl -XPOST 'http://localhost:9200/searchtest/mytype?pretty=1' -d '{
  "description": "Programming International!"
}'

curl -XPOST 'http://localhost:9200/searchtest/mytype?pretty=1' -d '{
  "description": "i18n is internationalizatin"
}'

echo "--- REFRESH ---"

curl -XPOST 'http://localhost:9200/_refresh?pretty=1'

echo "--- RUNNING QUERY WITH * ---"

curl -XGET 'http://localhost:9200/searchtest/mytype/_search?pretty' -d '
{
   "query" : {
      "query_string" : {
         "query" : "inte*"
      }
   }
}'

echo "--- RUNNING QUERY ---"

curl -XGET 'http://localhost:9200/searchtest/mytype/_search?pretty' -d '
{
   "query" : {
      "query_string" : {
         "query" : "inte"
      }
   }
}'

[我正在使用elasticsearch 0.90.9]

2 个答案:

答案 0 :(得分:2)

没有任何问题,query_string使用支持通配符的查询解析器,你可以看到here

也许您正在寻找一个前缀查询,该查询匹配以给定前缀开头的字词,请查看此link

curl -XGET 'http://localhost:9200/searchtest/mytype/_search?pretty' -d '
{
  "query" : {
    "prefix" : {
         "description" : {
            "value" : "inte"
        }
     }
  }
}'

答案 1 :(得分:0)

我认为您正在寻找通配符查询...

curl -XPOST "http://_search" -d'
{
"query": {
    "wildcard": {
       "description": {
          "value": "inte*"
                      }
                 }
         }
}'

尝试使用通配符进行上述查询以及正则表达式查询..!

它有帮助......!