well, one hacky solution would be to introduce a new property which stores email addresses directly on the personcontact. This would be added automatically for every EmailAddress resource.

On 12/18/2012 08:30 PM, Vishesh Handa wrote:



On Tue, Dec 18, 2012 at 9:30 PM, Sebastian Trüg <[email protected]
<mailto:[email protected]>> wrote:

    Maybe one: use mailto: addresses for the EmailAddress resources and
    let Akonadi use those instead of the additional properties.


Can't. Virtuoso doesn't index resource uris in the full text index.



    On 12/18/2012 12:45 PM, Vishesh Handa wrote:

        Hey everyone

        In Akonadi, they have a very common problem where they need to
        do a full
        text search across a number of properties and find the
        associated contact.

        The properties are -
        * nco:fullname
        * nco:nameGiven
        * nco:nameFamily
        * nco:emailAddress

        The problem is obviously that a nco:PersonContact unfortunately
        cannot
        have a nco:emailAddress. The EmailAddress must be a resource
        which then
        has the property nco:emailAddress which contains the email.

        Theoretically this makes a lot of sense cause an EmailAddress is a
        nco:ContactMedium. So one could write a query to iterate all the
        possible ways to contact a query, and one would get the email id.

        Practically, this sucks. Cause the query requires an extra join
        + union
        and gets slowed down significantly.

        select distinct ?r where {
        {
             ?r ?p ?o .
             FILTER( ?p in (nco:nameGiven, nco:fullname, nco:nameFamily)
          ) .
             ?o bif:contains "whatever" .
        }
        UNION
        {
             ?r nco:hasEmailAddress ?e .
             ?e bif:contains "whatever" .
        }

        This is a general problem all across Nepomuk where the
        ontologies (like
        a db schema) are fully normalized, and hence require one extra
        traversal
        to go to that object and get its property. In virtuoso this
        amounts to
        an extra join.

        Another example is searching for a song given its album, name, and
        artist's name. The query is horrible and takes over 18 seconds on my
        system (yeah, we are horrible at our main job - searching).
        Unfortunately, in this case we have a proper reason for
        splitting the
        data. In the Akonadi case there isn't much of reason.

        My suggestion to fix the Akonadi problem is either relaxing the
        condition for nco:emailAddress  or double typing the
        nco:PersonContact
        as an nco:EmailAddress. Both of which are very ugly.

        Does anyone else have a good solution?

        --
        Vishesh Handa



        _________________________________________________
        Nepomuk mailing list
        [email protected] <mailto:[email protected]>
        https://mail.kde.org/mailman/__listinfo/nepomuk
        <https://mail.kde.org/mailman/listinfo/nepomuk>

    _________________________________________________
    Nepomuk mailing list
    [email protected] <mailto:[email protected]>
    https://mail.kde.org/mailman/__listinfo/nepomuk
    <https://mail.kde.org/mailman/listinfo/nepomuk>




--
Vishesh Handa



_______________________________________________
Nepomuk mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/nepomuk

_______________________________________________
Nepomuk mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/nepomuk

Reply via email to