struct ll *curword = NULL;
        struct keyarray keylist = { NULL, 0, 0 };
        struct keyarray newkeylist = { NULL, 0, 0 };
+       int firstpass = 1;
 
        numkeys = 0;
        searchtext = strdup(search);
                                                data.data)[i];
                        }
 
-                       if (keylist.count == 0 ||
-                                       array_find(&keylist, keyid)) {
+                       /*
+                        * Only add the keys containing this word if this is
+                        * our first pass (ie we have no existing key list),
+                        * or the key contained a previous word.
+                        */
+                       if (firstpass || array_find(&keylist, keyid)) {
                                array_add(&newkeylist, keyid);
                        }
 
                }
                ret = cursor->c_close(cursor);
                cursor = NULL;
+               firstpass = 0;
                db4_endtrans();
        }
        llfree(wordlist, NULL);