* [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