2

私はsolrの特殊文字と「\」でエスケープすることについて多くのことを読みましたが、文字列フィールドタイプを使用していない限り、これがうまく機能しませんでした。

値として含まれるインデックス付きテキスト フィールドがa[bあります。この値を検索して、そのテキストを含むドキュメントのみを返したいと思います (そのテキストだけを含む必要はありませんが、これらの 3 文字をその順序で含める必要があります)。私が試したいくつかのクエリと、Solr から見た parsedQuery を次に示します。

q=field:a\\[bparsedquery: field:a field:b(a または ab を含むものは何でも返すようです) q=field:"a\\[b"parsedquery: PhraseQuery(field:"a b")(を含むものは何でも返すようですa b)

私は箱から出して text_general を使用しています - 私はいくつかの推奨される変更を試みましたが、今のところうまくいきません。誰かがこの問題を抱えていて、それを機能させる方法を見つけましたか?

4

1 に答える 1

2

SolrはデフォルトでStandardTokenizerFactoryを使用してトークンを作成します。トークンの作成中に、このトークナイザーは無関係な文字を削除します(おそらく特殊文字をトークン化します)。Solrが実際に'['をトークン化しているため、必要な結果が得られていない可能性があります。また、文字列型を使用している場合にのみ必要な結果が得られる理由も説明される場合があります(文字列型は分析されないため)。StandardTokenizerFactoryの代わりにWhiteSpaceTokenizerFactoryを使用してみてください。WhiteSpaceTokenizerFactoryは任意の空白をトークン化するため、(エスケープした後)特別な文字を照会できる場合があります。

インデックスアナライザーで上記のトークナイザーを指定することを忘れないでください。また、アナライザー(つまり、すべてのアナライザー)をクエリして選択してください。

例 :-

http://www.pathbreak.com/blog/solr-text-field-types-analyzers-tokenizers-filters-explained

于 2013-03-11T03:04:24.073 に答える