特殊文字(@、=、#、$、%、^、*)が渡されたときに、フィールド値クエリが予期しない結果を示しています。予期しない結果を返す特殊文字とフィルタリングされていない検索のフィールド値クエリ?
私がMLに挿入した4つのサンプルドキュメントを見つけてください。
<root>
<journalTitle>Dinesh</journalTitle>
<sourceType>JA</sourceType>
<title>title1</title>
<volume>volume0</volume>
</root>
<root>
<journalTitle>Gayari</journalTitle>
<sourceType>JA</sourceType>
<title>title1</title>
<volume>volume0</volume>
</root>
<root>
<journalTitle>Dixit</journalTitle>
<sourceType>JA</sourceType>
<title>title1</title>
<volume>volume0</volume>
</root>
<root>
<journalTitle>Singla</journalTitle>
<sourceType>JA</sourceType>
<title>title1</title>
<volume>volume0</volume>
</root>
CTS問合せ:私はすべての文書を取得していますこのクエリを実行するには
cts:search(
fn:doc(),
cts:field-value-query("Sample","#@#@#@*()", ("unwildcarded")),
"unfiltered"
)
。
私の理解によると、空のシーケンスを返す必要があります。
私が作成したフィールドを以下で見つけてください。 (XML形式)
フィールド:
<field xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://marklogic.com/xdmp/database">
<field-name>Sample</field-name>
<field-path>
<path>/root/journalTitle</path>
<weight>1.0</weight>
</field-path>
<word-lexicons/>
<included-elements/>
<excluded-elements/>
<tokenizer-overrides/>
</field>
インデックスの設定:
私はそれが与える検索文字列内の任意のアルファベット(複数可)を追加する場合私は正しい結果を返します。
同様:
- の#$%のF @
- ===== S
- DF $ D
は、この問題を解決するために私を助けてください=== ?
はい、正しい結果が得られます。私はこれを試しました。しかし、私は大文字と小文字を区別しない検索が必要なので、オプションに '大文字小文字を区別しない 'を渡しているので、これを使うことはできません。 'case-insensitive'と' exact'の両方を渡すと、例外がスローされます - '無効なオプション' –
型付き検索を 'advanced'に設定すると、問題は解決されます。 しかし、私は 'cts:element-word-query'と同じ問題を抱えています。 どのような解決策ですか? –
明らかにあなたの実際のニーズは、質問で尋ねられたものを超えています。大文字小文字の区別やステミングが必要なことを話しているからです。だから私はあなたが何が必要なのかよくわからない。あなたのフィールドでは、句読点の文字を「記号」として定義することで、句読点が通常無視される、フィルタリングされていない検索で確実に索引付けされ、考慮されることができます。 – hunterhacker