Hi,

This question may be Lucene related, but since I'm using it via Neo4J I'm
asking here first. I'm using Neo4J 1.4 M06.
I have a graph representing people, with a few properties about each person
(e.g., their name and job title).
Now I'd like to create a search form that will allow the user to enter
either the person's first name, last name, title, or any combination. For
example, the query [john director] should result with all the people whose
name or title contain both john and director.
To play with that, I created this little psvm:

public class FullTextIndexTest
{
    public static void main(String[] args)
    {
        GraphDatabaseService graphDb =
GraphDatabaseServiceFactory.createGraphDatabase("target/var/db");

        Transaction t = graphDb.beginTx();
        Node n1 = graphDb.createNode();
        n1.setProperty("name", "John Smith");
        n1.setProperty("title", "Directory Manager");

        Node n2 = graphDb.createNode();
        n2.setProperty("name", "Johnny Malkovich");
        n2.setProperty("title", "Director of R&D");

        Node n3 = graphDb.createNode();
        n3.setProperty("name", "John Horovich");
        n3.setProperty("title", "Sr. Director");

        IndexManager index = graphDb.index();
        Index<Node> fulltextPerson = index.forNodes("person-fulltext",
                MapUtil.stringMap(IndexManager.PROVIDER, "lucene", "type",
"fulltext"));
        fulltextPerson.add(n1, "combined", n1.getProperty("name") + " " +
n1.getProperty("title"));
        fulltextPerson.add(n2, "combined", n2.getProperty("name") + " " +
n2.getProperty("title"));
        fulltextPerson.add(n3, "combined", n3.getProperty("name") + " " +
n3.getProperty("title"));
        t.success();
        t.finish();

        // search in the fulltext index
        IndexHits<Node> hits = fulltextPerson.query("combined", "director
john");
        System.out.printf("Found %d results:\n", hits.size());
        for (Node node : hits)
        {
            System.out.println(node.getProperty("name") + ", " +
node.getProperty("title"));
        }
    }
}


I expected this program to return 1 result: John Horovich, Sr. Director
Instead, I'm getting 3:

John Horovich, Sr. Director
John Smith, Directory Manager
Johnny Malkovich, Director of R&D

It seems that Lucene will "accept" terms that contain a query term (e.g,
Directory and Johnny) even if I'm not using any wildcards in my query. How
do I turn this behavior off? I'd like the results to contain only people
whose name or title *contain* the word john, but not johnny.

Thanks!
--- Yaniv
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to