>
> (:
>
> 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.
>
> ----------------------------------------------------------
> :)
>
>

Reply via email to