ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] Как объединить значения для стандартных полей Recoll?
@ 2015-07-28 13:25 Eugine Kosenko
  2015-07-28 16:29 ` Michael Shigorin
  0 siblings, 1 reply; 6+ messages in thread
From: Eugine Kosenko @ 2015-07-28 13:25 UTC (permalink / raw)
  To: ALT Linux Community general discussions

Мне понадобилось добавить к стандартным полям Recoll значения, не
заданные в метаданных документа. Допустим, есть такой документ:

  <html>
    <head>
      <meta name="author" content="Kosenko" />
      <meta name="m:author" content="Maverik" />
      <title>An Example</title>
     </head>
    <body>
      Example
    </body>
  </html>

Здесь поле author является стандартным, а m:author ---
пользовательским. Чтобы задать это поле, в fields указывается:

  [prefixes]
  m:author=XYMA

  [stored]
  m:author=

Предположим также, что это результат обработки, например, pdf-файла,
исправлять который я не хочу или не могу. Мне нужно добавить значение
Constructor к полю author и значение Eugine к полю m:author. Для этого
в recoll.conf помещается объявление вида:

  [~/study/recoll/metadata/trial]
  metadatacmds = ; author = echo "Constructor"; m:author = echo "Eugine";

Логично ожидать, что теперь после индексации приведенного документа в
поле author будет записано «Kosenko - Constructor». а в поле m:author
--- значение «Maverik - Eugine». Однако оказывается, что поле
«m:author» приняло ожидаемое значение, а поле author --- нет. В нем
прописывается только внутреннее значение Kosenko, полученное в
результате обработки самого документа. Внешнее значение, заданное
командой metadatacmds, не добавляется.

Интересно, что если добавить в документ еще один метатэг, например, так:

  <meta name="author" content="Constructor" />

то это значение добавляется к полю, но без дефиса-разделителя:
«Kosenko Constructor». Это поведение одинаково как для стандартных,
так и для пользовательских полей. А вот если к полю m:author добавить
еще одно внешнее значение, скажем, так:

  [~/study/recoll/metadata/trial]
  metadatacmds = ; m:author = echo "Eugine"; m:author = echo "Creator";

то последнее значение в последовательности просто перекрывает все предыдущие.

Пока что я спасаюсь тем, что использую только поле m:author
(собственно, по описанной причине и потребовалось еще одно поле для
автора), а поле author объявляю его синонимом. Наоборот не получается
--- при индексации синоним m:author вначале приводится к каноническому
имени author, а затем все происходит так же, как и раньше. В
результате все значения объединяются как надо, но: во-первых, поле
author в таком случае вообще не заполняется, а во-вторых,
искусственное имя для стандартного атрибута --- это некрасиво.

Непонятно, в чем тут принципиальное отличие в значениях стандартных и
пользовательских полей, и можно ли его преодолеть, не ковыряясь в
исходниках?

Инспекция хранилища Xapian показала, что и в самом деле ключ
=Aconstructor= не сохраняется, а поле =author= не включает в себя
внешнее значение.  Похоже, проблема возникает именно на уровне Recoll
при формировании данных для сохранения.

Проблема наблюдается как в версии 1.20, так и в версии 1.21.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Как объединить значения для стандартных полей Recoll?
  2015-07-28 13:25 [Comm] Как объединить значения для стандартных полей Recoll? Eugine Kosenko
@ 2015-07-28 16:29 ` Michael Shigorin
  2015-08-02 13:34   ` Eugine Kosenko
  0 siblings, 1 reply; 6+ messages in thread
From: Michael Shigorin @ 2015-07-28 16:29 UTC (permalink / raw)
  To: ALT Linux Community general discussions

On Tue, Jul 28, 2015 at 04:25:54PM +0300, Eugine Kosenko wrote:
> Мне понадобилось добавить к стандартным полям Recoll значения,
> не заданные в метаданных документа.

Спроси автора, он хороший :)

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Как объединить значения для стандартных полей Recoll?
  2015-07-28 16:29 ` Michael Shigorin
@ 2015-08-02 13:34   ` Eugine Kosenko
  2015-08-02 21:07     ` Michael Shigorin
  0 siblings, 1 reply; 6+ messages in thread
From: Eugine Kosenko @ 2015-08-02 13:34 UTC (permalink / raw)
  To: ALT Linux Community general discussions

[-- Attachment #1: Type: text/plain, Size: 2194 bytes --]

В самом деле, автор довольно подробно объяснил нынешнее поведение
Recoll и дал патч, который его исправляет. Прилагаю этот патч к
письму.

Если коротко, то проблема касается только поля автора. Если один
документ вложен в другой (например, pdf вложен в электронное письмо),
и во вложенном документе (pdf) нет автора, то автором вложенного
документа считается автор внешнего (письма). Если же у вложенного
документа автор есть, то он перекрывает внешние
атрибуты, чтобы не приписать ошибочно вложенный документ автору
письма. Сейчас получается, что это же поведение действует для всех
документов, даже если они не вложены. После патча для вложенных
документов поведение должно остаться тем же, а обычные документы будут
принимать автора, заданного внешними атрибутами.

Надеюсь, этот патч можно приложить в нынешнюю официальную сборку Recoll?


2015-07-28 19:29 GMT+03:00, Michael Shigorin <mike@altlinux.org>:
> On Tue, Jul 28, 2015 at 04:25:54PM +0300, Eugine Kosenko wrote:
>> Мне понадобилось добавить к стандартным полям Recoll значения,
>> не заданные в метаданных документа.
>
> Спроси автора, он хороший :)
>
> --
>  ---- WBR, Michael Shigorin / http://altlinux.org
>   ------ http://opennet.ru / http://anna-news.info
> _______________________________________________
> community mailing list
> community@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/community

[-- Attachment #2: keep-topmost-author.patch --]
[-- Type: text/x-patch, Size: 2047 bytes --]

diff -r 10d2775fb628 src/internfile/internfile.cpp
--- a/src/internfile/internfile.cpp	Fri Jul 31 13:01:02 2015 +0200
+++ b/src/internfile/internfile.cpp	Fri Jul 31 17:58:44 2015 +0200
@@ -551,6 +551,10 @@
 // also set the author and modification time from the last doc which
 // has them.
 //
+// The stack can contain objects with an ipath element (corresponding
+// to actual embedded documents), and, at the top, elements without an
+// ipath element, corresponding to format translations of the last doc.
+//
 // The docsize is fetched from the first element without an ipath
 // (first non container). If the last element directly returns
 // text/plain so that there is no ipath-less element, the value will
@@ -579,7 +583,8 @@
 	const map<string, string>& docdata = (*hit)->get_meta_data();
 	if (getKeyValue(docdata, cstr_dj_keyipath, ipathel)) {
 	    if (!ipathel.empty()) {
-		// We have a non-empty ipath
+		// Non-empty ipath. This stack element is for an
+		// actual embedded document, not a format translation.
 		hasipath = true;
 		getKeyValue(docdata, cstr_dj_keymt, doc.mimetype);
 		getKeyValue(docdata, cstr_dj_keyfn, doc.meta[Rcl::Doc::keyfn]);
@@ -593,9 +598,19 @@
 		getKeyValue(docdata, cstr_dj_keydocsize, doc.fbytes);
 	    doc.ipath += cstr_isep;
 	}
+        // We set the author field from the innermost doc which has
+        // one: allows finding, e.g. an image attachment having no
+        // metadata by a search on the sender name. Only do this for
+        // actually embedded documents (avoid replacing values from
+        // metacmds for the topmost one). For a topmost doc, author
+        // will be merged by dijontorcl() later on. About same for
+        // dmtime, but an external value will be replaced, not
+        // augmented if dijontorcl() finds an internal value.
+        if (hasipath) {
 	getKeyValue(docdata, cstr_dj_keyauthor, doc.meta[Rcl::Doc::keyau]);
 	getKeyValue(docdata, cstr_dj_keymd, doc.dmtime);
     }
+    }
 
     // Trim empty tail elements in ipath.
     if (hasipath) {

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Как объединить значения для стандартных полей Recoll?
  2015-08-02 13:34   ` Eugine Kosenko
@ 2015-08-02 21:07     ` Michael Shigorin
  2015-08-03 13:29       ` Eugine Kosenko
  0 siblings, 1 reply; 6+ messages in thread
From: Michael Shigorin @ 2015-08-02 21:07 UTC (permalink / raw)
  To: ALT Linux Community general discussions

On Sun, Aug 02, 2015 at 04:34:03PM +0300, Eugine Kosenko wrote:
> В самом деле, автор довольно подробно объяснил нынешнее поведение
> Recoll и дал патч, который его исправляет. Прилагаю этот патч к
> письму.
[...]
> Надеюсь, этот патч можно приложить в нынешнюю официальную
> сборку Recoll?

Можно, конечно -- а тебе интересней в сизифе, на локалхосте
или дождаться в официальной версии recoll?

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Как объединить значения для стандартных полей Recoll?
  2015-08-02 21:07     ` Michael Shigorin
@ 2015-08-03 13:29       ` Eugine Kosenko
  2015-08-03 16:51         ` Michael Shigorin
  0 siblings, 1 reply; 6+ messages in thread
From: Eugine Kosenko @ 2015-08-03 13:29 UTC (permalink / raw)
  To: ALT Linux Community general discussions

Пока в Сизифе. На локалхосте у меня уже все установлено. Автор
пообещал включить это изменение в следующую версию. Просто, если будут
обновления релиза в Сизифе, не хотелось бы потерять уже установленное.

2015-08-03 0:07 GMT+03:00, Michael Shigorin <mike@altlinux.org>:
> On Sun, Aug 02, 2015 at 04:34:03PM +0300, Eugine Kosenko wrote:
>> В самом деле, автор довольно подробно объяснил нынешнее поведение
>> Recoll и дал патч, который его исправляет. Прилагаю этот патч к
>> письму.
> [...]
>> Надеюсь, этот патч можно приложить в нынешнюю официальную
>> сборку Recoll?
>
> Можно, конечно -- а тебе интересней в сизифе, на локалхосте
> или дождаться в официальной версии recoll?
>
> --
>  ---- WBR, Michael Shigorin / http://altlinux.org
>   ------ http://opennet.ru / http://anna-news.info
> _______________________________________________
> community mailing list
> community@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/community

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Как объединить значения для стандартных полей Recoll?
  2015-08-03 13:29       ` Eugine Kosenko
@ 2015-08-03 16:51         ` Michael Shigorin
  0 siblings, 0 replies; 6+ messages in thread
From: Michael Shigorin @ 2015-08-03 16:51 UTC (permalink / raw)
  To: ALT Linux Community general discussions

On Mon, Aug 03, 2015 at 04:29:25PM +0300, Eugine Kosenko wrote:
> Пока в Сизифе. На локалхосте у меня уже все установлено. Автор
> пообещал включить это изменение в следующую версию. Просто,
> если будут обновления релиза в Сизифе, не хотелось бы потерять
> уже установленное.

Будет обновление по версии, разумеется.
Давай тогда обождём апстримную.

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-08-03 16:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-28 13:25 [Comm] Как объединить значения для стандартных полей Recoll? Eugine Kosenko
2015-07-28 16:29 ` Michael Shigorin
2015-08-02 13:34   ` Eugine Kosenko
2015-08-02 21:07     ` Michael Shigorin
2015-08-03 13:29       ` Eugine Kosenko
2015-08-03 16:51         ` Michael Shigorin

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git