2007/2/18, Joe Shaw &lt;<a href="mailto:joeshaw@novell.com">joeshaw@novell.com</a>&gt;:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>Mikkel Kamstrup Erlandsen wrote:<br>&gt; 2007/2/16, Joe Shaw &lt;<a href="mailto:joeshaw@novell.com">joeshaw@novell.com</a> &lt;mailto:<a href="mailto:joeshaw@novell.com">joeshaw@novell.com</a>&gt;&gt;:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; For people who want to index their data externally we provide
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; an indexing service.&nbsp;&nbsp;Apps can do one of two things: they can make an<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; RPC call and pass in a document and metadata to be indexed, or they can<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; drop the file into ~/.beagle/ToIndex with a control file that describes
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; its metadata and Beagle will automatically index it.&nbsp;&nbsp;(This latter<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; method is how the Beagle Firefox extension works.)<br>&gt;<br>&gt; What kind of rpc is available?<br><br>It&#39;s just the standard Beagle RPC mechanism (basically XML over a Unix
<br>domain socket).<br><br>C#:<br><a href="http://svn.gnome.org/viewcvs/beagle/trunk/beagle/BeagleClient/IndexingService.cs?view=markup">http://svn.gnome.org/viewcvs/beagle/trunk/beagle/BeagleClient/IndexingService.cs?view=markup
</a><br><br>C:<br><a href="http://svn.gnome.org/viewcvs/beagle/trunk/beagle/libbeagle/beagle/beagle-indexing-service-request.h?view=markup">http://svn.gnome.org/viewcvs/beagle/trunk/beagle/libbeagle/beagle/beagle-indexing-service-request.h?view=markup
</a></blockquote><div><br><br>Ok. If we are to standardize something like this, I would assume that we use dbus for rpc - as far as I can tell that doesn&#39;t seem to be a problem..? Fx a dbus api like:<br><br>&nbsp;- AddFile (in as metadata, in s input_file)
<br>&nbsp;- AddText (in as metadata, in s text)<br><br>where the metadata argument contains things such as uri, mime, and hit type (in some specified order (and maybe some filtering/stemming/whatnot info)). The AddFile method sorta replaces the &quot;drop-in-special-dir&quot; approach - the drop-in-special-dir method could still be allowed for apps not talking dbus. The AddText method should encapsulate the functionality of Beagles&#39; current IndexServiceRequest/Indexable duo.
<br></div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; Dropping files in a special directory sounds like a thing that most<br>
&gt; indexers could support. Perhaps this can be standardized. Is there a<br>&gt; place where I can find documentation/examples/code for this?<br><br>Sure, the format is described in the comment at the top of the<br>IndexingService backend file:
<br><br><a href="http://svn.gnome.org/viewcvs/beagle/trunk/beagle/beagled/IndexingServiceQueryable/IndexingServiceQueryable.cs?view=markup">http://svn.gnome.org/viewcvs/beagle/trunk/beagle/beagled/IndexingServiceQueryable/IndexingServiceQueryable.cs?view=markup
</a></blockquote><div><br><br>It seems like a compact form of what Jamie described a few mails back. If there is a heavy data flow compactness is good, but I honestly have no clue how much traffic there is for stuff like this...
<br></div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">And an example implementation is in the (sorry, ugly) Firefox extension:<br>
<br><a href="http://svn.gnome.org/viewcvs/beagle/trunk/beagle/mozilla-extension/content/beagleOverlay.js?view=markup">http://svn.gnome.org/viewcvs/beagle/trunk/beagle/mozilla-extension/content/beagleOverlay.js?view=markup
</a><br><br>(the beagleWriteContent() and beagleWriteMetadata() methods)<br><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; We could maybe create an external data source backend, but since the<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; sources are so specific, all it would amount to would be calling some
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; sort of script that did the crawling and used one of the two methods<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; above to signal Beagle.&nbsp;&nbsp;Unlike the external filters, there hasn&#39;t been<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; any demand for it, and fitting it in to the scheduler so that it didn&#39;t
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; peg the indexer or fill up the disk would be tough to do externally.<br>&gt;<br>&gt;<br>&gt; I&#39;m not sure I understand what you are saying. Is it that polling many<br>&gt; external data source &quot;handles&quot; would be to heavy?
<br><br>Sorry, I didn&#39;t describe it very well.&nbsp;&nbsp;The issue here is that in<br>Beagle, we extract only a subset of the data at a time.&nbsp;&nbsp;For example, on<br>a 300,000 message mailbox we obviously can&#39;t process them all at the
<br>same time.&nbsp;&nbsp;You&#39;d want to have some similar sort of throttling for<br>external data sources, but doing that means that you basically have to<br>write code to do it.&nbsp;&nbsp;If you have to write code anyway, why not just<br>
make it a proper data source?</blockquote><div><br><br>By a data source you mean something that uses IndexServiceRequests and Indexables?<br>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
The other thing is that data sources often have to maintain state.&nbsp;&nbsp;Our<br>file system backend, for instance, has to have inotify watches for every<br>directory it watches.&nbsp;&nbsp;It has to maintain state to know which<br>directories it has crawled.&nbsp;&nbsp;It has to know about the directory tree so
<br>that it can handle moves correctly, etc.&nbsp;&nbsp;To move all of these out of<br>process, you&#39;d essentially have to create yet another daemon.</blockquote><div><br>Ok, I get the picture now, thanks for clearing it out.<br>
<br>In many cases the &quot;daemon&quot; would be the browser or a mail client - which keeps a lot of state anyway, so I don&#39;t see that as a big problem. In fx. an email client you can be pretty confident that other apps doesn&#39;t mess with your data while you are not running, so there is no need to &quot;watch&quot; the mailbox.
<br><br>Cheers,<br>Mikkel<br></div><br></div><br>