Piezo input

I'm working on a project for my physical computing class and I'm having a problem with the piezo sensor. From what I understand it is supposed to be really sensitive and pick up sound vibrations relatively close by. However, when I run the example knock code the piezo doesn't pick anything up until I directly tap on the piezo itself. First, I'd like to know if I'm misunderstanding the piezo sensor, meaning is its proper function to only detect vibration when it is in direct contact with the piezo. Second, if that is not the case and it is supposed to detect sounds from a more distant source, what do I so to the piezo to work properly.

I have power and ground going to the breadboard, a 1M ohm resistor from ground on the breadboard to the breadboard and Analog 0 right after that. The power on piezo is connected to analog 0 and ground to ground. I'm trying to be descriptive as I can to avoid any confusion but let me know if there's any information needed.

This is the code I'm currently looking at for the piezo:

// these constants won't change:
const int ledPin = 13; // led connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0
const int threshold = 100; // threshold value to decide when the detected sound is a knock or not

// these variables will change:
int sensorReading = 0; // variable to store the value read from the sensor pin
int ledState = LOW; // variable used to store the last LED status, to toggle the light

void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
Serial.begin(9600); // use the serial port
}

void loop() {
// read the sensor and store it in the variable sensorReading:
sensorReading = analogRead(knockSensor);

// if the sensor reading is greater than the threshold:
if (sensorReading >= threshold) {
// toggle the status of the ledPin:
ledState = !ledState;
// update the LED pin itself:
digitalWrite(ledPin, ledState);
// send the string "Knock!" back to the computer, followed by newline
Serial.println("Knock!");
}
Serial.println(sensorReading);//serial value the sensor picked up
delay(100); // delay to avoid overloading the serial port buffer
}

Once the piezo is working I plan to use it to control a servo motor by reading in the serial value and having it move accordingly. A pen will be attached to the servo and it will write on paper that feeds through a small calculator printer. This should create a makeshift visualizer of the sound being read in by the piezo.

I would try changing the resistor. 1M ohm seems high. Experiment with different resistors like 10k or 1k and see what kind a a response you get.