I.はじめに
標準Solrの構文を使用してほとんどのクエリ。この構文は、最も一般的なSolrの、デフォルトのクエリパーサーのハンドルです。デフォルトのSolrはLuceneのクエリパーサークエリパーサクラスの実装] [LuceneQParserPlugin。Luceneクエリパーサーは完全に文法のいくつかの独自の拡張のLuceneとSolrのをサポートしています。
二.Luceneクエリ構文パーサ
1.フィールドの検索
Solrのインデックスの値を検索する場合、それは一般的に、特定のフィールドに見ています。検索フィールドの構文は次のとおりです。フィールド名+「:」+検索、例えば次のように:
タイトル:Solrのか、タイトル:「ApacheのSolrの」request_content_split :(プロセスの問題)注:括弧は集合を表す、各要素は、既定の表現を意味し、スペースで区切っOR
明示的に指定されていないキーワード検索フィールドのアプローチは非常に一般的ですが、大規模では、デフォルトのフィールド上の一般的なキーワード検索が定義されたことに留意すべきです。例えば、コンテンツがデフォルトのフィールドとして定義されている場合] [DF =コンテンツ、次の2つのクエリは同等です。
Solrのまたはコンテンツ:Solrの
また、フィールドとコロンの表現範囲が明確に定義されなければならないことに注意してください。次の2つのクエリは、[仮定]等価であるDF =コンテンツが、ユーザーが最初のクエリ内の他の意図であってもよいです。
タイトル:ApacheのSolrの或タイトル:apacheのコンテンツ:Solrの
あなたは同じフィールドに複数の用語を検索すると、検索フィールド内の用語の範囲を指定する表現を組み合わせて使用します。
タイトル:(ApacheのSolrの)
あなたはフレーズを検索しようとすると、これは、クエリ内のすべての条件が発生しますが、代わりに[]括弧の使用引用符が同時に表示される必要がありますフレーズを必要とし、フレーズの範囲を定義します。
タイトル: "ApacheのSolrの"
2.使用中の基本的な用語[縮小]
一つ以上の語彙項目を指定するには接続詞に単項+アイテムを使用しているように見えます。指定されたワードエントリ、そうでない場合はマッチしないを含む文書を除きます。文書照合項目は、二項演算子を使用して、複数の単語を含んでANDまたは&&、または各単語のための単項+エントリを使用する必要がある場合。
デフォルトのオペレータがあるとした場合、他の指定事業者が存在しない場合に、各語彙項目は必須条件です。各追加項目がさらに制限するために不可欠であろうので、あなたがさらに最適化する結果の数を必要な用語の複数を使用してクエリを高速化できるように、文書セットを得られる単語の合計数。
3.オプション語彙項目
それは他のケースに適用される文書の数の拡大に一致する、練習場を制限することが必要と比較。デフォルトの演算子はORそう特に指定がない限り、それぞれの式はオプションです。同様に、文書照合エントリ含む少なくとも一つの単語を表す式の複数の間のバイナリ演算子ORまたは||使用。
これは、文書の一致以上のオプション語彙項目は大きな多様性、またはその他のブール演算よりも高い運用実装コストにつながることは注目に値します。限られた数の内容であれば、検索キーワードの場合、価格が高い、デフォルトの演算子として使用することを検討してOR、いくつかの結果[リコール]戻る確保し、精度を犠牲にしていた願っています。より高い親和性のスコアで、通常は結果に一致する文書以上のオプション語彙ので、デフォルトの演算子として使用ORと関連性のスコアに応じて、最も関連性の高い検索結果の結果の一部を取得することも可能ですランクインしています。ただし、クエリを展開するすべての異なったキーワードを一致させる必要性は、より多くのいくつかの奇妙な一致を取得します。
4.フレーズ検索[以下の使用、およびWordのフィールドを使用して使用する必要があります]
あなたはフレーズとしてそれらを囲むために隣同士、引用符を使用する複数の語彙項目を一致させたい場合。このクエリ式は試合にまったく同じテキストを保証するものではありません、検索フィールドには、アナライザを修正する用語でフレーズが含まれていてもよいです。特定の検索語句の最も合理的には関係のないフレーズを一致させるべきではありません。特定のフィールドと複数の単語名がコンテンツに適用されるフレーズ検索処理。
使用される式の組み合わせ[]
任意の複雑なブール句を処理するには、Solrの使用は、クエリ式を結合するために括弧します。
発現組成物は、例えば、発現の文脈で提供されてもよい、同じフィールドに検索語を複数示します。式には、任意の組み合わせで入れ子にすることができます。
6.語彙項目近接
短语搜索是词项相似度搜索的简化版本。通过添加波浪线和词项位置距离数搜索位置相近的词项,不一定是相邻的。
短语搜索是词项位置距离为0的邻近搜索。
词项距离为3表示查询两词之间词项距离<=3的搜索,两词项交换位置相当于移动了两个词项位置。
指定足够大的有效邻近值,可以匹配出文档中任意位置的词项,这与AND查询效果类似。词项邻近度查询还有一个副作用,在文档中词项越靠近,该邻接查询对应的相关度得分就越高。与组合查询相比,当词项距离较大时,使用邻近词搜索花费成本更高。
7.字符邻近
不仅可以在词项之间进行邻近搜索,还可以对词项中的字符进行基于编辑距离的搜索,找到拼写相似的词项。字符邻近搜索的语法与词项邻近搜索类似,由于字符邻近搜索处理的是一个词项,因此不带引号。
1表示与搜索词项最多有一个字符的差距,包括多一个字符,少一个字符和一个字符不一样三种情况。
8.排除词项
有时我们需要从查询中明确排除特定词项。在表达式上使用一元运算符-【减号】或在表达式之间使用NOT布尔运算符来排除词项。
或
9.区间搜索【方括号为闭区间,花括号为开区间】
有时候我们不希望查询表达式只匹配出一个值,而是匹配出值的整个区间。区间可以是数值区间、日期区间或字符串区间。区间搜索能够找到指定的一组值,其语法为字段名加冒号再加一个方括号。
如果没有指定区间的最大值和最小值,则需要对开区间的上限和下线使用通配符*
10.通配符搜索
有些情况下用户需要对Solr索引中单词或短语的变体进行匹配。对于用户输入的大多数关键词而言,词干提取这类技术让通配符搜索变得没那么重要了,然而对于查找以特定字符集开头的文档或替代单个字符的操作,通配符搜索还是还有用武之地的。
11.权重表达式
如果表达式后面指定了一个插入号【^】,无论是词项、短语还是组合表达式,都可以调整相关度权重。
12.特殊字符转义【分词器字段除外】
Solr中有些字符是保留字符,也就是说,它们被当做查询语法进行解析,而不是作为搜索词项。包括:
如果要搜索保留字符,必须将保留字符用引号括起来,或者使用反斜杠对其进行转义。关键词中处理保留字符的推荐做法是在传入Solr之前去除没有搜索价值的保留字符,或者对它们依次使用反斜杠进行转义。
当搜索字段为分词器字段时,保留字符会被分词过滤掉,因此搜索时不加保留字符也可以搜索到!