From: Joe W. <jo...@gm...> - 2009-12-11 19:00:38
|
Hi Tindaro, > I forgot to specify that in the field ALL ,the user can use all the > full-text operators( AND,OR,*,....) combined with the strings. > I can't simply join the 3 distinct queries because the string $q may contain > AND,in fact the AND as default operator is needed for this field. I see, so let me confirm: there are 4 input fields (N, TITLE, TEXT, ALL), and the user can enter text into any of them, and can use full-text operators in only the 4th (ALL)? > As an example: > Searching " 1.2 AND Shakespeare AND Denmark " in ALL must find all the > paragraphs in the book whose "@n" is 1.2 AND whose title is Shakespeare( + > all results for Shakespeare in the text of div4 ) AND whose title is > Denmark ( + all results for Denmark in the text of div4 ). > In this case the query //div4[ft:query(@n, $q) or > ft:query(./parent::div3/p[1], $q) > or ft:query(p, $q)] will search " 1.2 AND Shakespeare AND Denmark " among @n > attributese and will not find anything, the same for the other 2 > sub-queries. If the user puts the text string "1.2 AND Shakespeare AND Denmark" into the ALL field, then you're right - you can't simply pass this string to the ft:query() function. You'll need to parse this string and construct an appropriate string or XML representation of the search to pass to the function. You'll need to consider if the order of the terms is important, and if you want hits even if "1.2" is in the text of a <p> element, rather than just in the @n attribute. The down side of doing your own parsing is that you lose some of the convenience of relying on Lucene's default query syntax parser, but it's doable. Perhaps if "fielded" search is added to eXist's Lucene support at some point in the future, you could configure it to allow queries like: "n:1.2 AND title:Shakespeare AND paragraph:Denmark". > How can i change the Lucene default boolean operator in eXist? I'm not sure what you mean - could you elaborate a bit on what you mean, and provide specific examples of how the current behavior doesn't meet your requirements? Joe |