使用正则表达式或通配符过滤器通过id查询Elasticsearch

时间:2015-07-02 10:47:03

标签: regex elasticsearch

我收到了ID列表:

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    private Viewport viewport;
    private Camera camera;

    @Override
    public void create() {
        camera = new OrthographicCamera();
        viewport = new StretchViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        viewport.setCamera(camera);
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");

    }

    @Override
    public void render() {
        camera.update();
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0, viewport.getWorldWidth(),viewport.getWorldHeight());
        batch.end();
    }

    @Override
    public void resize(int width, int height) {
        viewport.update(width, height);

    }
}

每个*都是一个未知的字符,我需要找到符合这些模式的所有ID。

我在 id _id ID 等字段名称上尝试了 regex 过滤器,始终使用&# 34。BC2 * 13" (或其他人)但即使现有文件也没有匹配。

3 个答案:

答案 0 :(得分:2)

默认情况下,_id字段未编入索引:这就是您没有结果的原因。

尝试在映射中将_id字段设置为analyzed

POST /test_id/
{
  "mappings":{
    "indexed":{
      "_id":{
        "index":"analyzed"
      }
    }
  }
}

添加一些文档:

PUT /test_id/indexed/bc2***********************13
{
  "content":"test1"
}

PUT /test_id/indexed/b53***********************92
{
  "content":"test2"
}

我查看了一个简单的regexp查询:

POST /test_id/_search
{
  "query": {
    "regexp": {
      "_id": "bc2.*13"
    }
  }
}

结果:

"hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_id",
            "_type": "indexed",
            "_id": "bc2***********************13",
            "_score": 1,
            "_source": {
               "content": "test1"
            }
         }
      ]
   }

希望这会有所帮助:)

答案 1 :(得分:0)

如果*已知并且长度恒定:

bc2.{23}13|b53.{23}92|39f.{23}bb|eb7.{23}7a|80b.{23}22

DEMO

否则:

bc2.*?13|b53.*?92|39f.*?bb|eb7.*?7a|80b.*?22

DEMO2

答案 2 :(得分:0)

使用_uid字段和wildcard查询:

GET yourIndex/yourType/_search
{
  "query": {
    "wildcard": {
      "_uid": "bc2***********************13"
    }
  }
}