如何使用NodeJS

时间:2016-02-05 23:34:35

标签: javascript node.js elasticsearch

我整天都在反对这一点,似乎无法弄清楚如何让它发挥作用。

我有这样的源文档:

{
  "created_at": 1454700182,
  "message_id": 160,
  "user_id": 1,
  "establishment_id": 1,
  "geo": {
    "coordinates": [-4.8767633,
      89.7833547
    ],
    "type": "Point"
  },
  "message": "Venus is in the west",
  "active": true,
  "score": 0,
  "name": {
    "first": "First",
    "last": "Last"
  },
  "neighborhood": "Townside"
},

我在ElasticSearch中创建了这样的文档:

{
  "message_id": 160,
  "message": "Venus is in the west",
  "first_name": "First",
  "last_name": "Last",
  "location": {
    "lon": -4.8767633,
    "lat": 89.7833547
  },
  "created_at": 1454700182,
  "neighborhood": "Townside"
}

我一直在尝试不同的方法来创建索引。

首先:

client.indices.create({
      index: 'messages',
      type: 'document',
      body: {
        messages: {
          properties: {
            message: {
              type: 'string',
              index: 'not_analyzed'
            },
            neighborhood: {
              type: 'string',
              index: 'not_analyzed'
            },
            first_name: {
              type: 'string',
              index: 'not_analyzed'
            },
            last_name: {
              type: 'string',
              index: 'not_analyzed'
            },
            created_at: {
              type: 'integer',
              index: 'not_analyzed'
            },
            location: {
              type: 'geo_point',
              lat_lon: true
            }
          }
        }
      },
    }
);

这允许我进行模糊文本搜索和大于查询,但不识别geo_point。所以我尝试了这个:

client.indices.create({
  index: 'messages',
  type: 'document',
  "mappings": {
    "messages": {
      "properties": {
        "message": {
          "type": "string",
          "index": "not_analyzed"
        },
        "neighborhood": {
          "type": "string",
          "index": "not_analyzed"
        },
        "first_name": {
          "type": "string",
          "index": "not_analyzed"
        },
        "last_name": {
          "type": "string",
          "index": "not_analyzed"
        },
        "created_at": {
          "type": "integer",
          "index": "not_analyzed"
        },
        "location": {
          "type": "geo_point",
          "lat_lon": true,
          "index": "not_analyzed"
        }
      }
    }
  }
});

这确实识别geo_point,但其他任何东西都不起作用。

以下是我一直用于非地理字段的查询:

            query = {
              query: {
                filtered: {
                  query: {
                    multi_match: {
                      query: message,
                      fields: ['message', 'neighborhood', 'first_name', 'last_name'],
                      "fuzziness": "AUTO",
                      "prefix_length": 2
                    }
                  },
                  filter: {
                    bool: {
                      must: {
                        range: {
                          "created_at": {
                            "gte": min_ts
                          }
                        }
                      }
                    }
                  }
                }
              }
            };

我对此已经如此扭曲,只是试图允许文本和地理搜索相同的文档集合,我至少需要另一组眼睛。

感谢任何帮助!

0 个答案:

没有答案