On 02/01/2010 12:39 AM, Paul Libbrecht wrote:
> Sergiu,
>
> I've done a LuceneIndexProfile that's quite different from your
> description:
>     
> http://svn.activemath.org/intergeo/Platform/i2gCurriki/plugins/lucene/src/main/java/com/xpn/xwiki/plugin/lucene/LuceneIndexProfile.java
>
> The idea of this interface is that it is given to the IndexUpdater and
> data-objects so that they query how to best index, how to best ignore
> documents or fields (important for memory usage limitation), and maybe
> for custom indexing strategy.

I looked a bit at the code, and it is very focused on your needs. 
Personally, I'd suggest that you go ahead and use it, since it will be a 
while until we can implement something more generic, and it definitely 
won't work with a 1.5 core (probably not even with a 2.2 core).

> I am not sure I grasp your cascade proposal. Which steps would it
> involve?

In your approach, there's only one implementation that handles the 
decisions. In my approach, there can be several implementations, each 
one handling its part. This means that you can write a custom 
implementation for i2geo, but it won't be suited for a bigger 
environment, where several different applications are installed and each 
one would benefit from customizing the index. So, each application could 
also come with its own indexing rules: the blog, the calendar, the user 
management...

Cascading these filters ensures that there can be several cross-cutting 
indexing rules that apply to the same entity,

> Sure I could migrate this strategy to "abstract entities" as you
> describe them but I am making this for i2geo.net which runs the
> curriki 1.8 branch which uses xwiki 1.5.4... so i need to be somewhat
> long backwards compatible.
>
> thanks
>
> paul
>
> PS: when I said central-field I meant an XWikiPrefererence field
> similar to the Notification field: a reference to a groovy page
> containing a class implementing the given interface. I would love to
> use this for the lucene-index-profile custom class (for now I'd just
> need to call the setter within the first-called-page).
>
>
> Le 31-janv.-10 à 20:32, Sergiu Dumitriu a écrit :
>>> Probably the nicest way I see this would be the way the notifications
>>> are done: a central field indicates the page of a groovy source which
>>> should implement such an interface as "LuceneIndexProfile" which
>>> would
>>> add such questions (maybe even including some more such as the Data
>>> classes).
>> I'm not sure I understood your approach, could you explain it in more
>> detail? What do you mean by "central field"?
>>
>>
>> The way I see it, each indexed field will have a reference, given by
>> some coordinates (this is related to the thread about object and
>> properties references), such as
>> "wiki:Space.Document^classname[index].property". There should be a
>> collection of filters (components implementing LuceneIndexFilter)
>> which
>> have the following method:
>>
>> boolean filter(Reference entity, LuceneIndexProfile profile);
>>
>> The meaning is the following:
>> - entity is the entity to process (could be a document, an object
>> property, an attachment)
>> - profile is the indexing profile built by the filters, initialized
>> with
>> some default values in the Lucene Plugin, and modified by the
>> filters as
>> it passes through them
>> - returning true means that the filtering process should stop, since
>> the
>> current filter decided that the profile is ready (for example if a
>> filter decided that the document should not be indexed due to security
>> restrictions, then it's useless to run all the other filters); by
>> default filters return false, letting the other filters to adjust the
>> profile
>> - each filter looks at the reference and, based on some internal
>> rules,
>> decides if it should alter the filter for this entity, and if it
>> considers that no more filtering is useful/needed
>>
>> After the filtering is done, the plugin indexes (or not) the entity
>> according to the values in the profile.
>>
>> This means that we could have several components affecting the Lucene
>> behavior, each one with particular goals in mind (security,
>> performance,
>> searchability), and each one with its own configuration.
>>
>>
>> So, what needs to be done (except writing the code) is define the
>> possible settings in the LuceneIndexProfile, define the filters
>> needed,
>> decide how to configure them. XML files on the server are an option,
>> but
>> one not flexible enough. Maybe objects inside the wiki will give more
>> flexibility to application developers. So, another thing to do is
>> decide
>> the fields needed in such a class.
>>
>> Of course, if somebody needs a new filter, it's easy to add a new
>> jar or
>> write a new Groovy page in the wiki.


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to