Author: andy
Date: Thu Sep 4 08:38:01 2014
New Revision: 1622417
URL: http://svn.apache.org/r1622417
Log:
JENA-776 : LowerCaseKeywordAnalyzer
Added:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/LowerCaseKeywordAnalyzer.java
(with props)
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/LowerCaseKeywordAnalyzerAssembler.java
(with props)
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLowerCaseKeywordAnalyzer.java
(with props)
Modified:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithKeywordAnalyzer.java
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
Added:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/LowerCaseKeywordAnalyzer.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/LowerCaseKeywordAnalyzer.java?rev=1622417&view=auto
==============================================================================
---
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/LowerCaseKeywordAnalyzer.java
(added)
+++
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/LowerCaseKeywordAnalyzer.java
Thu Sep 4 08:38:01 2014
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.jena.query.text.analyzer ;
+
+import java.io.Reader ;
+
+import org.apache.lucene.analysis.Analyzer ;
+import org.apache.lucene.analysis.core.KeywordTokenizer ;
+import org.apache.lucene.analysis.core.LowerCaseFilter ;
+import org.apache.lucene.util.Version ;
+
+
+/**
+ * Lucene Analyzer implementation that works like KeywordAnalyzer (i.e.
+ * doesn't tokenize the input, keeps it as a single token), but forces text
+ * to lowercase and is thus case-insensitive.
+ */
+
+public class LowerCaseKeywordAnalyzer extends Analyzer {
+ private Version version;
+
+ public LowerCaseKeywordAnalyzer(Version ver) {
+ this.version = ver;
+ }
+
+ @Override
+ protected TokenStreamComponents createComponents(String fieldName,
Reader reader) {
+ KeywordTokenizer source = new KeywordTokenizer(reader);
+ LowerCaseFilter filter = new LowerCaseFilter(version, source);
+ return new TokenStreamComponents(source, filter);
+ }
+
+}
Propchange:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/analyzer/LowerCaseKeywordAnalyzer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/LowerCaseKeywordAnalyzerAssembler.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/LowerCaseKeywordAnalyzerAssembler.java?rev=1622417&view=auto
==============================================================================
---
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/LowerCaseKeywordAnalyzerAssembler.java
(added)
+++
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/LowerCaseKeywordAnalyzerAssembler.java
Thu Sep 4 08:38:01 2014
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.jena.query.text.assembler ;
+
+import org.apache.jena.query.text.TextIndexLucene;
+import org.apache.jena.query.text.analyzer.LowerCaseKeywordAnalyzer;
+import org.apache.lucene.analysis.Analyzer;
+
+import com.hp.hpl.jena.assembler.Assembler;
+import com.hp.hpl.jena.assembler.Mode;
+import com.hp.hpl.jena.assembler.assemblers.AssemblerBase;
+import com.hp.hpl.jena.rdf.model.Resource;
+
+/**
+ * Assembler to create lowercase keyword analyzers.
+ */
+public class LowerCaseKeywordAnalyzerAssembler extends AssemblerBase {
+ /*
+ text:map (
+ [ text:field "text" ;
+ text:predicate rdfs:label;
+ text:analyzer [
+ a lucene:LowerCaseKeywordAnalyzer ; ]
+ ]
+ .
+ */
+
+ @Override
+ public Analyzer open(Assembler a, Resource root, Mode mode) {
+ return new LowerCaseKeywordAnalyzer(TextIndexLucene.VER);
+ }
+}
Propchange:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/LowerCaseKeywordAnalyzerAssembler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java?rev=1622417&r1=1622416&r2=1622417&view=diff
==============================================================================
---
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
(original)
+++
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextAssembler.java
Thu Sep 4 08:38:01 2014
@@ -33,6 +33,7 @@ public class TextAssembler
Assembler.general.implementWith(TextVocab.standardAnalyzer, new
StandardAnalyzerAssembler()) ;
Assembler.general.implementWith(TextVocab.simpleAnalyzer, new
SimpleAnalyzerAssembler()) ;
Assembler.general.implementWith(TextVocab.keywordAnalyzer, new
KeywordAnalyzerAssembler()) ;
+ Assembler.general.implementWith(TextVocab.lowerCaseKeywordAnalyzer,
new LowerCaseKeywordAnalyzerAssembler()) ;
}
}
Modified:
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java?rev=1622417&r1=1622416&r2=1622417&view=diff
==============================================================================
---
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
(original)
+++
jena/trunk/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
Thu Sep 4 08:38:01 2014
@@ -54,6 +54,7 @@ public class TextVocab
public static final Property pStopWords = Vocab.property(NS,
"stopWords");
public static final Resource simpleAnalyzer = Vocab.resource(NS,
"SimpleAnalyzer");
public static final Resource keywordAnalyzer = Vocab.resource(NS,
"KeywordAnalyzer");
+ public static final Resource lowerCaseKeywordAnalyzer =
Vocab.resource(NS, "LowerCaseKeywordAnalyzer");
}
Modified:
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java?rev=1622417&r1=1622416&r2=1622417&view=diff
==============================================================================
--- jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
(original)
+++ jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
Thu Sep 4 08:38:01 2014
@@ -44,6 +44,7 @@ import org.junit.runners.Suite.SuiteClas
, TestDatasetWithSimpleAnalyzer.class
, TestDatasetWithStandardAnalyzer.class
, TestDatasetWithKeywordAnalyzer.class
+ , TestDatasetWithLowerCaseKeywordAnalyzer.class
})
public class TS_Text
Modified:
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithKeywordAnalyzer.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithKeywordAnalyzer.java?rev=1622417&r1=1622416&r2=1622417&view=diff
==============================================================================
---
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithKeywordAnalyzer.java
(original)
+++
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithKeywordAnalyzer.java
Thu Sep 4 08:38:01 2014
@@ -47,9 +47,9 @@ public class TestDatasetWithKeywordAnaly
private static final String SPEC_BASE = "http://example.org/spec#";
private static final String SPEC_ROOT_LOCAL = "lucene_text_dataset";
private static final String SPEC_ROOT_URI = SPEC_BASE + SPEC_ROOT_LOCAL;
- private static final String SPEC;
- static {
- SPEC = StrUtils.strjoinNL(
+
+ private static String makeSpec(String analyzer) {
+ return StrUtils.strjoinNL(
"prefix rdfs:
<http://www.w3.org/2000/01/rdf-schema#> ",
"prefix ja:
<http://jena.hpl.hp.com/2005/11/Assembler#> ",
"prefix tdb:
<http://jena.hpl.hp.com/2008/tdb#>",
@@ -87,15 +87,15 @@ public class TestDatasetWithKeywordAnaly
" text:map (",
" [ text:field \"label\" ; ",
" text:predicate rdfs:label ;",
- " text:analyzer [ a
text:KeywordAnalyzer ]",
+ " text:analyzer [ a " + analyzer
+ " ]",
" ]",
" [ text:field \"comment\" ;
text:predicate rdfs:comment ]",
" ) ."
);
}
- public static void init() {
- Reader reader = new StringReader(SPEC);
+ public static void init(String analyzer) {
+ Reader reader = new StringReader(makeSpec(analyzer));
Model specModel = ModelFactory.createDefaultModel();
specModel.read(reader, "", "TURTLE");
TextAssembler.init();
@@ -111,7 +111,7 @@ public class TestDatasetWithKeywordAnaly
}
@BeforeClass public static void beforeClass() {
- init();
+ init("text:KeywordAnalyzer");
}
@AfterClass public static void afterClass() {
Added:
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLowerCaseKeywordAnalyzer.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLowerCaseKeywordAnalyzer.java?rev=1622417&view=auto
==============================================================================
---
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLowerCaseKeywordAnalyzer.java
(added)
+++
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLowerCaseKeywordAnalyzer.java
Thu Sep 4 08:38:01 2014
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.jena.query.text;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.jena.atlas.lib.StrUtils;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * This class defines a setup configuration for a dataset that uses a
lowercase keyword analyzer with a Lucene index.
+ */
+public class TestDatasetWithLowerCaseKeywordAnalyzer extends
TestDatasetWithKeywordAnalyzer {
+ @BeforeClass public static void beforeClass() {
+ init("text:LowerCaseKeywordAnalyzer");
+ }
+
+ @Test
+ public void testLowerCaseKeywordAnalyzerIsCaseInsensitive() {
+ final String testName =
"testLowerCaseKeywordAnalyzerIsCaseInsensitive";
+ final String turtle = StrUtils.strjoinNL(
+ TURTLE_PROLOG,
+ "<" + RESOURCE_BASE + testName + ">",
+ " rdfs:label 'F;riM at&/ped9'",
+ "."
+ );
+ String queryString = StrUtils.strjoinNL(
+ QUERY_PROLOG,
+ "SELECT ?s",
+ "WHERE {",
+ " ?s text:query ( rdfs:label 'f;ri*' 10 ) .",
+ "}"
+ );
+ Set<String> expectedURIs = new HashSet<>() ;
+ expectedURIs.addAll( Arrays.asList(RESOURCE_BASE + testName)) ;
+ doTestSearch(turtle, queryString, expectedURIs);
+ }
+}
Propchange:
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLowerCaseKeywordAnalyzer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java?rev=1622417&r1=1622416&r2=1622417&view=diff
==============================================================================
---
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
(original)
+++
jena/trunk/jena-text/src/test/java/org/apache/jena/query/text/assembler/TestEntityMapAssembler.java
Thu Sep 4 08:38:01 2014
@@ -27,6 +27,7 @@ import org.apache.jena.atlas.lib.Interna
import org.apache.jena.atlas.logging.LogCtl ;
import org.apache.jena.query.text.EntityDefinition ;
import org.apache.jena.query.text.TextIndexException ;
+import org.apache.jena.query.text.analyzer.LowerCaseKeywordAnalyzer ;
import org.apache.lucene.analysis.core.KeywordAnalyzer ;
import org.apache.lucene.analysis.core.SimpleAnalyzer ;
import org.apache.lucene.analysis.standard.StandardAnalyzer ;
@@ -55,6 +56,7 @@ public class TestEntityMapAssembler {
private static final Resource spec3;
private static final Resource spec4;
private static final Resource spec5;
+ private static final Resource spec6;
private static final Resource specNoEntityField;
private static final Resource specNoDefaultField;
private static final Resource specNoMapProperty;
@@ -112,6 +114,12 @@ public class TestEntityMapAssembler {
assertEquals(KeywordAnalyzer.class,
entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
}
+ @Test public void EntityHasMapEntryWithLowerCaseKeywordAnalyzer() {
+ EntityDefinitionAssembler entDefAssem = new EntityDefinitionAssembler();
+ EntityDefinition entityDef = entDefAssem.open(Assembler.general, spec6,
null);
+ assertEquals(LowerCaseKeywordAnalyzer.class,
entityDef.getAnalyzer(SPEC1_DEFAULT_FIELD).getClass());
+ }
+
@Test(expected=TextIndexException.class) public void
errorOnNoEntityField() {
EntityDefinitionAssembler entDefAssem = new
EntityDefinitionAssembler();
entDefAssem.open(null, specNoEntityField, null);
@@ -231,6 +239,22 @@ public class TestEntityMapAssembler {
.addProperty(RDF.type,
TextVocab.keywordAnalyzer))
}));
+ // create a simple entity map specification using a lowercase
keyword analyzer
+
+ spec6 = model.createResource(TESTBASE + "spec6")
+
.addProperty(TextVocab.pEntityField, SPEC1_ENTITY_FIELD)
+
.addProperty(TextVocab.pDefaultField, SPEC1_DEFAULT_FIELD)
+
.addProperty(TextVocab.pMap,
+
model.createList(
+
new RDFNode[] {
+
model.createResource()
+
.addProperty(TextVocab.pField, SPEC1_DEFAULT_FIELD)
+
.addProperty(TextVocab.pPredicate, SPEC1_PREDICATE)
+
.addProperty(TextVocab.pAnalyzer,
+
model.createResource()
+
.addProperty(RDF.type,
TextVocab.lowerCaseKeywordAnalyzer))
+
}));
+
// bad assembler spec
specNoEntityField =