(:

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.  

----------------------------------------------------------
:)