Индексирование двоичного файла и поиск по содержимому не могут найти результатыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Индексирование двоичного файла и поиск по содержимому не могут найти результаты

Сообщение Anonymous »

Я хотел бы попросить вас помочь понять, где я ошибаюсь при создании рабочего примера, в котором я заполняю репозиторий двоичными данными, индексирую его и запускаю содержащий запрос.
У меня есть журналы TRACE, и я вижу, что индексация работает, однако при выполнении запроса я всегда получаю 0 результатов.
Репозиторий — это MemoryNodeStore, и я создаю его следующим образом:

Код: Выделить всё

LuceneIndexProvider provider = new LuceneIndexProvider();
Oak oak = new Oak(ns) // ns is a NodeStore MemoryNodeStore
.with((QueryIndexProvider) provider)
.with((Observer) provider)
.with(new LuceneIndexEditorProvider());
repository = new Jcr(oak).createRepository();
Затем я заполняю его следующим образом:

Код: Выделить всё

Node node = rootNode.addNode("node" + i, "nt:unstructured");
byte[] data = ("testo" + i).getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(data);
Binary binary = session.getValueFactory().createBinary(bais);
try {
node.setProperty("binaryData", binary);

} finally {
binary.dispose();
}
node.setProperty("jcr:mimeType", "text/plain");
Тогда индекс такой:

Код: Выделить всё

Node root = session.getRootNode();
Node oakIndex = root.getNode("oak:index");
Node index = oakIndex.addNode("contentTextIndex", "oak:QueryIndexDefinition");
index.setProperty("type", "lucene");
index.setProperty("async", (String[]) null);
Node indexRules = index.addNode("indexRules", "nt:unstructured");
Node ntBase = indexRules.addNode("nt:base", "nt:unstructured");
Node properties = ntBase.addNode("properties", "nt:unstructured");
Node binaryDataProperty = properties.addNode("binaryData", "nt:unstructured");
binaryDataProperty.setProperty("name", "binaryData";
binaryDataProperty.setProperty("propertyIndex", true);
binaryDataProperty.setProperty("analyzed", true);
Node jcrMimeTypeProperty = properties.addNode("jcr:mimeType");
jcrMimeTypeProperty.setProperty("name", "jcr:mimeType");
jcrMimeTypeProperty.setProperty("propertyIndex", true);
jcrMimeTypeProperty.setProperty("analyzed", true);
Тогда я ищу так:

Код: Выделить всё

String sql2QueryString = "SELECT * FROM [nt:base] WHERE CONTAINS([binaryData], 'testo')";
Query sql2Query = queryManager.createQuery(sql2QueryString, Query.JCR_SQL2);
QueryResult result = sql2Query.execute();
и я читаю результаты следующим образом:

Код: Выделить всё

NodeIterator nodes = result.getNodes();
while (nodes.hasNext()) {
Node node = nodes.nextNode();
log.info("Path: " + node.getPath());
counter++;
}
log.info("Found {} results", counter);
Я использую дуб 1.68.0 с tika-core и tika-parsers-standard-package 2.9.2.
В журналах я вижу индексация и извлечение текста корректны, если хотите, могу прикрепить полный журнал.
Очень спасибо за помощь, с уважением

Подробнее здесь: https://stackoverflow.com/questions/789 ... nd-results
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»