On Dec 5, 2005, at 3:18 PM, Paul Elschot wrote:
On Monday 05 December 2005 17:56, John Haxby wrote:
Yonik Seeley wrote:

I looked into this a year ago... most scripting languages have an
emphasis on script execution speed, not script parsing speed (which is
what we would need).  The scripting languages I tried were horribly
slow at parsing a small script.  The only one that could parse at a
reasonable speed was rhino (javascript) in interp mode.


I've always found the lisp syntax very easy to parse.  In this case,
it's just prefix with the nam of he operator being first in the list, eg
(and "eggs" "oranges").   There are wrinkles for named and optional
parameters, but the basic syntax is a doddle.

Lisp syntax is good at nesting, and it also does properties and roles:

((phrase 5) "eggs" "oranges")

(boolean (must "eggs") (mustnot "oranges"))


I like the simplicity. Now the earlier example:


(boosting
  (match
    ((moreLikeThis (percent "0.25") (docId "44"))
      (compareField "contents")
      (compareField "title")
    )
  )
  ((downgrade (demote "0.5"))
    ((simple "contents")
      (or "ice hockey" puck rink)
    )
  )
)

The deep nesting is tricky with only one kind of
partentheses/brackets.

For data communication, LISP is just XML with parenthesis instead of angle brackets.

Again, we're talking machine-to-machine communication here, not human- machine.

Perhaps python like is better. Python
has nesting by indentation introduced by a colon at the end
of the previous line.
To be read with a fixed width font:

boosting:
  match:
    moreLikeThis(percent="0.25", docId="44"):
      compareField("contents")
      compareField("title")
  downgrade(demote="0.5"):
    simple("contents"):
      or:
        "ice hockey"
        puck
        rink


Quite readable, but not so easy to parse.
(One could even do away with the colons.)

And this is basically YAML: http://www.yaml.org/start.html

While there have been several different topics brought up on this thread, it seems we're diverging from the original idea. Let's consider the most basic use case example here, and I'm making it intentionally as concrete as possible:

A Swing client performs searches by communicating with a Lucene search server, which is wrapped by a RESTful servlet. The client wants to issue sophisticated queries that are not supported by QueryParser.

Breakdown: Lucene itself is not needed on the client, only an HTTP connection with bits of XML back and forth to query and send results. Sure, Lucene could be on the client and a Query created, serialized, and sent to the server. The same version of Lucene, probably, is required on both sides, which seems over constrained to transfer a general query. Having an XML format representing a Query and a mechanism to parse it into an actual Query instance makes a lot of sense. The proposed LISP, Python, etc formats don't add anything to the equation, and actually complicate it. The JVM has a built-in XML parser, so no additional dependency is needed (don't get me wrong, that argument has caused ugly languages to be created, like Ant :). Again, we're talking only machine-to-machine communication here, but with Ant humans are involved - so the argument is a bit different. I don't see a need to construct a new language, but rather to do just what Mark has mentioned, come up with a Spring/Ant, and I'll toss in other ideas to consider, HiveMind/Digester-like mechanism to instantiate a Query from parsed XML. Digester might be sufficient enough, actually. Spring seems pretty heavy for this job. Just a tiny bit of SAX/DOM custom coding, actually, is all that we need really. Because of the variations in how the Query subclass constructors and setters work, there will need to be a little bit of glue between as well, I presume.

        Erik


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to