Package org.eurekastreams.commons.search.explanation

Source Code of org.eurekastreams.commons.search.explanation.FieldMatchDeterminerTest

/*
* Copyright (c) 2009-2010 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.commons.search.explanation;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;

import org.eurekastreams.commons.search.analysis.TextStemmerAnalyzer;
import org.eurekastreams.commons.search.modelview.FieldMatch;
import org.junit.Test;

/**
* Test fixture for FieldMatchDeterminer.
*/
public class FieldMatchDeterminerTest
{
    /**
     * Test determineFieldMatches() with a TextStemmerAnalyzer.
     */
    @Test
    public void testDetermineFieldMatches()
    {
        FieldMatchDeterminer sut = new FieldMatchDeterminer();
        List<String> fieldsToAnalyze = new ArrayList<String>();
        fieldsToAnalyze.add("typeOfAuto");
        fieldsToAnalyze.add("name");

        sut.setFieldsToAnalyze(fieldsToAnalyze);
        sut.setSearchAnalyzer(new TextStemmerAnalyzer());
        FieldMatch matches = sut.determineFieldMatches(getExplanation(), "ford cars");

        assertTrue(matches.isMatch("typeOfAuto"));
        assertTrue(matches.isMatch("name"));
        assertFalse(matches.isMatch("foobar"));

        // note that the keyword that lucene found was "car", but we passed that in as "cars", so that's what it's
        // telling us we matched.
        Object[] matchedKeywords = matches.getMatchingKeywords("typeOfAuto").toArray();
        assertEquals(1, matchedKeywords.length);
        assertEquals("cars", matchedKeywords[0]);

        // note that these keywords come back in alphabetical order
        matchedKeywords = matches.getMatchingKeywords("name").toArray();
        assertEquals(2, matchedKeywords.length);
        assertEquals("cars", matchedKeywords[0]);
        assertEquals("ford", matchedKeywords[1]);
    }

    /**
     * Test determining fields when no fields are being inspected.
     */
    @Test
    public void testDetermineFieldMatchesWithNoFields()
    {
        FieldMatchDeterminer sut = new FieldMatchDeterminer();
        sut.setFieldsToAnalyze(new ArrayList<String>());
        sut.setSearchAnalyzer(new TextStemmerAnalyzer());

        FieldMatch matches = sut.determineFieldMatches(getExplanation(), "ford cars");

        assertFalse(matches.isMatch("typeOfAuto"));
        Object[] matchedKeywords = matches.getMatchingKeywords("typeOfAuto").toArray();
        assertEquals(0, matchedKeywords.length);

        matchedKeywords = matches.getMatchingKeywords("name").toArray();
        assertEquals(0, matchedKeywords.length);
    }

    /**
     * Test determining fields when one field is being inspected.
     */
    @Test
    public void testDetermineFieldMatchesWithOneFields()
    {
        FieldMatchDeterminer sut = new FieldMatchDeterminer();
        List<String> fieldsToAnalyze = new ArrayList<String>();
        fieldsToAnalyze.add("typeOfAuto");

        sut.setFieldsToAnalyze(fieldsToAnalyze);
        sut.setSearchAnalyzer(new TextStemmerAnalyzer());
        FieldMatch matches = sut.determineFieldMatches(getExplanation(), "ford cars");

        assertTrue(matches.isMatch("typeOfAuto"));
        assertFalse(matches.isMatch("name"));
        assertFalse(matches.isMatch("foobar"));

        // note that the keyword that lucene found was "car", but we passed that in as "cars", so that's what it's
        // telling us we matched.
        Object[] matchedKeywords = matches.getMatchingKeywords("typeOfAuto").toArray();
        assertEquals(1, matchedKeywords.length);
        assertEquals("cars", matchedKeywords[0]);

        // note that these keywords come back in alphabetical order
        matchedKeywords = matches.getMatchingKeywords("name").toArray();
        assertEquals(0, matchedKeywords.length);
    }

    /**
     * Get a canned explanation String as it's returned by Lucene.
     *
     * @return a canned explanation String as it's returned by Lucene
     */
    private String getExplanation()
    {
        return "0.4852078 = (MATCH) product of:\n" + "            1.6982272 = (MATCH) sum of:\n"
                + "              0.5762654 = (MATCH) product of:\n" + "                1.1525308 = (MATCH) sum of:\n"
                + "                  1.1525308 = (MATCH) weight(typeOfAuto:car^5.0 in 1056), product of:\n"
                + "                    0.27270508 = queryWeight(typeOfAuto:car), product of:\n"
                + "                      4.22629 = idf(docFreq=42, numDocs=1082)\n"
                + "                      0.06452587 = queryNorm\n"
                + "                    4.22629 = (MATCH) fieldWeight(typeOfAuto:car in 1056), product of:\n"
                + "                      1.0 = tf(termFreq(typeOfAuto:car)=1)\n"
                + "                      4.22629 = idf(docFreq=42, numDocs=1082)\n"
                + "                      1.0 = fieldNorm(field=typeOfAuto, doc=1056)\n"
                + "                0.5 = coord(1/2)\n" + "              1.1219617 = (MATCH) sum of:\n"
                + "                0.86984557 = (MATCH) weight(name:ford in 1056), product of:\n"
                + "                  0.21297395 = queryWeight(name:ford), product of:\n"
                + "                    6.601196 = idf(docFreq=3, numDocs=1082)\n"
                + "                    0.032262936 = queryNorm\n"
                + "                  4.0842814 = (MATCH) fieldWeight(name:ford in 1056), product of:\n"
                + "                    1.4142135 = tf(termFreq(name:ford)=2)\n"
                + "                    6.601196 = idf(docFreq=3, numDocs=1082)\n"
                + "                    0.4375 = fieldNorm(field=name, doc=1056)\n"
                + "                0.2521161 = (MATCH) weight(name:car in 1056), product of:\n"
                + "                  0.13635254 = queryWeight(name:car), product of:\n"
                + "                    4.22629 = idf(docFreq=42, numDocs=1082)\n"
                + "                    0.032262936 = queryNorm\n"
                + "                  1.849002 = (MATCH) fieldWeight(name:car in 1056), product of:\n"
                + "                    1.0 = tf(termFreq(name:car)=1)\n"
                + "                    4.22629 = idf(docFreq=42, numDocs=1082)\n"
                + "                    0.4375 = fieldNorm(field=name, doc=1056)\n"
                + "            0.2857143 = coord(2/7)";

    }
}
TOP

Related Classes of org.eurekastreams.commons.search.explanation.FieldMatchDeterminerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.