FrancoisZhang commented on a change in pull request #469:
URL: https://github.com/apache/jackrabbit-oak/pull/469#discussion_r796012232
##########
File path:
oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/dynamicBoost/DynamicBoostTest.java
##########
@@ -77,101 +77,280 @@ protected void createTestIndexNode() throws Exception {
@Override
protected ContentRepository createRepository() {
IndexTracker tracker = new IndexTracker();
- LuceneIndexEditorProvider editorProvider = new
LuceneIndexEditorProvider(null,
- new ExtractedTextCache(0, 0),
- factory, Mounts.defaultMountInfoProvider());
- LuceneIndexProvider provider = new LuceneIndexProvider(tracker,
- factory);
- return new Oak()
- .with(new OpenSecurityProvider())
+ LuceneIndexEditorProvider editorProvider = new
LuceneIndexEditorProvider(null, new ExtractedTextCache(0, 0), factory,
+ Mounts.defaultMountInfoProvider());
+ LuceneIndexProvider provider = new LuceneIndexProvider(tracker,
factory);
+ return new Oak().with(new OpenSecurityProvider())
.with((QueryIndexProvider) provider)
.with((Observer) provider)
.with(editorProvider)
.createContentRepository();
}
- @Test public void withFieldProvider() throws Exception {
+ // Section 1. indexing test
+ @Test
+ public void testIndexingFieldProvider() throws Exception {
NodeTypeRegistry.register(root, toInputStream(ASSET_NODE_TYPE), "test
nodeType");
- createIndex("dam:Asset");
+ createIndex("dam:Asset", false);
root.commit();
factory.indexFieldProvider = new IndexFieldProviderImpl();
+ factory.queryTermsProvider = new FulltextQueryTermsProviderImpl();
- String log = runTest(IndexFieldProviderImpl.class, true);
- assertEquals(
- "[" +
- "Added augmented fields:
jcr:content/metadata/predictedTags/[my, a, my:a], 10.0" +
- "]", log);
+ String log = runIndexingTest(IndexFieldProviderImpl.class, true);
+ assertEquals("[" + "Added augmented fields:
jcr:content/metadata/predictedTags/[my, a, my:a], 10.0" + "]", log);
}
- @Test public void withDynamicBoost() throws Exception {
- NodeTypeRegistry.register(root, toInputStream(ASSET_NODE_TYPE), "test
nodeType");
- Tree props = createIndex("dam:Asset");
- Tree pt = createNodeWithType(props, "predictedTags", UNSTRUCTURED);
- pt.setProperty("name", "jcr:content/metadata/predictedTags/.*");
- pt.setProperty("isRegexp", true);
- pt.setProperty("dynamicBoost", true);
- pt.setProperty("propertyIndex", true);
- root.commit();
+ @Test
+ public void testIndexingDynamicBoost() throws Exception {
+ createAssetsIndexAndProperties(false, false);
- String log = runTest(LuceneDocumentMaker.class, true);
+ String log = runIndexingTest(LuceneDocumentMaker.class, true);
assertEquals(
- "[" +
- "Added augmented fields:
jcr:content/metadata/predictedTags/[my, a, my:a], 10.0, " +
- "Added augmented fields:
jcr:content/metadata/predictedTags/[my, a, my:a], 30.0, " +
- "confidence is not finite:
jcr:content/metadata/predictedTags, " +
- "confidence is not finite:
jcr:content/metadata/predictedTags, " +
- "confidence parsing failed:
jcr:content/metadata/predictedTags, " +
- "confidence parsing failed:
jcr:content/metadata/predictedTags, " +
- "confidence is an array:
jcr:content/metadata/predictedTags, " +
- "confidence is an array:
jcr:content/metadata/predictedTags, " +
- "name is an array: jcr:content/metadata/predictedTags,
" +
- "name is an array: jcr:content/metadata/predictedTags"
+
- "]", log);
- }
-
- @Test public void withDynamicBoostLite() throws Exception {
- NodeTypeRegistry.register(root, toInputStream(ASSET_NODE_TYPE), "test
nodeType");
- Tree props = createIndex("dam:Asset", true);
- Tree pt = createNodeWithType(props, "predictedTags", UNSTRUCTURED);
- pt.setProperty("name", "jcr:content/metadata/predictedTags/.*");
- pt.setProperty("isRegexp", true);
- pt.setProperty("dynamicBoost", true);
- pt.setProperty("propertyIndex", true);
- root.commit();
+ "[" + "Added augmented fields:
jcr:content/metadata/predictedTags/[my, a, my:a], 10.0, " + "Added augmented
fields: jcr:content/metadata/predictedTags/[my, a, my:a], 30.0, " + "confidence
is not finite: jcr:content/metadata/predictedTags, " + "confidence is not
finite: jcr:content/metadata/predictedTags, " + "confidence parsing failed:
jcr:content/metadata/predictedTags, " + "confidence parsing failed:
jcr:content/metadata/predictedTags, " + "confidence is an array:
jcr:content/metadata/predictedTags, " + "confidence is an array:
jcr:content/metadata/predictedTags, " + "name is an array:
jcr:content/metadata/predictedTags, " + "name is an array:
jcr:content/metadata/predictedTags" + "]",
+ log);
+ }
+
+ @Test
+ public void testIndexingDynamicBoostLite() throws Exception {
+ createAssetsIndexAndProperties(true, false);
- String log = runTest(LuceneDocumentMaker.class, true);
+ String log = runIndexingTest(LuceneDocumentMaker.class, true);
assertEquals("[]", log);
}
- @Test public void withDynamicBoostMissingProperty() throws Exception {
- NodeTypeRegistry.register(root, toInputStream(ASSET_NODE_TYPE), "test
nodeType");
- Tree props = createIndex("dam:Asset");
- Tree pt = createNodeWithType(props, "predictedTags", UNSTRUCTURED);
- pt.setProperty("name", "jcr:content/metadata/predictedTags/.*");
- pt.setProperty("isRegexp", true);
- pt.setProperty("dynamicBoost", true);
- pt.setProperty("propertyIndex", true);
- root.commit();
+ @Test
+ public void testIndexingDynamicBoostMissingProperty() throws Exception {
+ createAssetsIndexAndProperties(true, false);
- String log = runTest(LuceneDocumentMaker.class, false);
+ String log = runIndexingTest(LuceneDocumentMaker.class, false);
assertEquals("[]", log);
}
- private String runTest(Class<?> loggerClass, boolean nameProperty) throws
CommitFailedException {
- LogCustomizer customLogs = LogCustomizer
- .forLogger(loggerClass)
- .enable(Level.TRACE).create();
+ // verifying fulltext query syntax ability, put here for comparison with
dynamic boost and dynamic boost lite
+ @Test
+ public void testQueryFullTextWithTitle() throws Exception {
+ createAssetsIndexAndProperties(false, false);
+ prepareTestAssets();
+
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'titleone')]",
XPATH, Arrays.asList("/test/asset1"));
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'long')]", XPATH,
Arrays.asList("/test/asset1", "/test/asset2"));
+ // case insensitive
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'LONG')]", XPATH,
Arrays.asList("/test/asset1", "/test/asset2"));
+ // wildcard works
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'title*')]",
XPATH,
+ Arrays.asList("/test/asset1", "/test/asset2", "/test/asset3"));
+ // space is treated as AND
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'long
titleone')]", XPATH, Arrays.asList("/test/asset1"));
+ // OR works
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'long OR
titleone')]", XPATH, Arrays.asList("/test/asset1", "/test/asset2"));
+ // minus works
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'long
-titleone')]", XPATH, Arrays.asList("/test/asset2"));
+ }
+
+ // Section 2. Query dynamicboost testing
+ @Test
+ public void testQueryDynamicBoostBasic() throws Exception {
+ createAssetsIndexAndProperties(false, false);
+ prepareTestAssets();
+
+ assertEquals(
+ "[dam:Asset] as [a] /*
lucene:test-index(/oak:index/test-index) :fulltext:plant " +
"((jcr:content/metadata/predictedTags/plant:1
jcr:content/metadata/predictedTags/plant:1)^1.0E-4) ft:(\"plant\")\n" + "
where contains([a].[*], 'plant') */",
+ explain("//element(*, dam:Asset)[jcr:contains(., 'plant')]",
XPATH));
+
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'plant')]", XPATH,
+ Arrays.asList("/test/asset1", "/test/asset2", "/test/asset3"));
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'flower')]",
XPATH, Arrays.asList("/test/asset1", "/test/asset2"));
+ }
+
+ // dynamic boost: query should be case insensitive
+ @Test
+ public void testQueryDynamicBoostCaseInsensitive() throws Exception {
+ createAssetsIndexAndProperties(false, false);
+ prepareTestAssets();
+
+ assertQuery("//element(*, dam:Asset)[jcr:contains(., 'FLOWER')]",
XPATH, Arrays.asList("/test/asset1", "/test/asset2"));
+ }
+
+ @Ignore //todo: bug? wildcard doesn't work at all for dynamic boost term
Review comment:
make sense, removed it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]