> > (: > > Thanks Christian ... I had to write this out to understand it better > I have basic understanding of what you are saying. I will read >> > https://www.w3.org/TR/xpath-full-text-10/#ftwildcardoption. It looks > flexible > > https://www.w3.org/TR/xpath-full-text-10/#ftdistance > > 'exactly 0' specifies the range [0, 0]. > 'at least 1' specifies the range [1,unbounded). > 'at most 1' specifies the range (unbounded, 1]. > 'from 5 to 10' specifies the range [5, 10]. > > ftor : An or-selection finds all matches that satisfy at least one of the > operand full-text selections. 4.2.6.1 FTOr > ftand ...https://www.w3.org/TR/xpath-full-text-10/#tq-ft-fs-FTAnd > 4.2.6.2 FTAnd > > ?? > [146] FTOr ::= FTAnd ( "ftor" FTAnd )* > [147] FTAnd ::= FTMildNot ( "ftand" FTMildNot )* > [148] FTMildNot ::= FTUnaryNot ( "not" "in" FTUnaryNot )* > [149] FTUnaryNot ::= ("ftnot")? FTPrimaryWithOptions > > :) > > let $a := 'A B' contains text { 'A', 'B' } all distance at most 0 words > let $b := 'A B' contains text { 'A', 'B' } all distance at most 1 words > let $c := 'A B' contains text { 'A', 'B' } all distance at most 2 words > let $d := 'A C B' contains text { 'A', 'B' } all distance at most 0 words > let $e := 'A C B' contains text { 'A', 'B' } all distance at most 1 words > let $f := 'A C B' contains text { 'A', 'B' } all distance at most 2 words > let $g := 'A C B' contains text { 'A', 'B' } all distance at most 3 words > > let $h := 'A x B' contains text 'A B' all distance at most 1 words > let $i := 'A x B' contains text 'A B' all words distance at most 1 words > let $j := 'A x B x x B' contains text { 'A', 'B' } all distance at most 1 > words > let $k := 'A x B x x B' contains text 'A' ftand 'B' all words distance at > most 1 words > > return <x>{for $w at $pos in ($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k) return > element {fn:codepoints-to-string(fn:string-to-codepoints('a')+ $pos - 1)} > {$w} }</x> > > (: > ---------------------------------------------------------- > This query returns true: > 'A x B' contains text { 'A', 'B' } all distance at most 1 words === true > => the distance of seperation is !=0, ==1, at most (>=1) words > => I understand > ---------------------------------------------------------- > The following query returns false because 'A B' is treated as a single > search term: > 'A x B' contains text 'A B' all distance at most 1 words === false > => I understand > ---------------------------------------------------------- > The following query returns true. It’s actually equivalent to the > first query: Due to “all words”, the single string will be tokenized > into independent search terms. > => the query is not specified in the email > I am guessing the query was i) above (with all words): 'A x B' contains > text 'A B' all words distance at most 1 words > Specification ?If FTAnyallOption is "all words", the tokens from all the > strings are combined into a single set. If the set is empty, the FTWords > yields no matches. The resulting matches must contain all of the tokens in > the set. > > ---------------------------------------------------------- > Things get freaky with the next use case: > 'A x B x x B' contains text { 'A', 'B' } all distance at most 1 words === > false > The query creates three string matches: 1 for “A” and 2 for ”B”. The > specification states: “When a distance selection applies a distance > condition to more than two matches, the distance condition is required > to hold on each successive pair of matches.” [1]. In our case, the > rule does not hold on the last pair (the distance between “B” and “B” > is too large). > =>Yes this is freaky .. I understand because the distances of B(first) > from A is 1 word but B(second) from A is 4 words > =>instead of 'at most' there possibly could be a 'within' option ... > > These are the DTSearch Options - they can be combined into a boolean > expression but clearly are not as flexible (eg FTTimes) > > > https://support.dtsearch.com/webhelp/dtsearchCppApi/Boolean_Search_Requests.html > Search Request > Explanation > apple and pear > -Both words must be present. > apple or pear > -Either word can be present. > apple w/5 pear > -Apple must occur within 5 words of pear. > apple pre/5 pear > -Apple must occur 5 or fewer words before pear. > apple not w/5 pear > -Apple must not occur within 5 words of pear. > apple and not pear > -Only apple must be present. > name contains smith > -The field name must contain smith > apple w/5 xfirstword > -Apple must occur in the first five words. > apple w/5 xlastword > -Apple must occur in the last five words. > > There are also nested fields that can be built into a boolean search ... > https://support.dtsearch.com/webhelp/dtsearch/field_searching.htm > /record//city contains Middleton > > I will read https://www.w3.org/TR/xpath-full-text-10/#ftwildcardoption > and basex. It confusing to me but seems super flexible. >
> ---------------------------------------------------------- > 'A x B x x B' contains text 'A' ftand 'B' all words distance at most 1 > words === true > This query will return two “full-text matches”, each containing two > “string matches”, and the check will be successful if at least one > full-text match is successul. In this case, it’s the first full-text > match, which contains string-matches for “A” and “B”, which are at > most one word distant from each other. > > => It is great that it works. I add this to my memory banks and will push > on - thanks again this is all much appreciated. > > ---------------------------------------------------------- > :) > >