簡體   English   中英

Solr:我如何在兩個不同的領域進行分組?

[英]Solr : How can I group on two different fields?

我的架構如下:

product_id  
category_id

類別包含產品。
在solr 3.6中,我對category_id進行了分組,效果很好。

我剛剛添加了一個新字段:

group_id

一組包含大小或顏色不同的產品。
示例:藍色,紅色和黃色的鞋子是3種不同的產品,並且具有相同的group_id。

除了字段category_id的結果分組之外,我希望在我的結果中只有一個group_id的產品,假設group_id可以為null(對於不屬於組的產品)。

按照鞋子的例子,這意味着對於請求“鞋子”,3個產品中只有一個應該是結果。

我想在group_id上進行第二次結果分組,但我似乎不可能這樣做。

任何的想法?

編輯:現在,我在php中處理結果,刪除已經在結果中的group_id的文檔。 我打開這個主題,以防有人發現如何分組2個字段

如果您的目標是根據多個“分組依據”字段獲取分組計數,則可以使用數據透視分面來實現此目的。

&facet.pivot=category_id,group_id

Solr將在facet_pivot元素下面的搜索結果頁面之后返回分組結果計數的層次結構。

http://wiki.apache.org/solr/SimpleFacetParameters?highlight=%28pivot%29#Pivot_.28ie_Decision_Tree.29_Faceting

無法按兩個字段進行查詢分組。 如果需要計數,則可以使用facet.field (對於單個字段)或facet.pivot (對於多個字段)。 它實際上不是組,但您可以獲得多個字段的組數。

示例輸出:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <bool name="zkConnected">true</bool>
        <int name="status">0</int>
        <int name="QTime">306</int>
    </lst>
    <result name="response" numFound="667" start="0" maxScore="0.70710677">
        <doc>
            <int name="idField">7393</int>
            <int name="field_one">12</int>
        </doc>
    </result>
    <lst name="facet_counts">
        <lst name="facet_queries"/>
        <lst name="facet_fields"/>
        <lst name="facet_ranges"/>
        <lst name="facet_intervals"/>
        <lst name="facet_heatmaps"/>
        <lst name="facet_pivot">
            <arr name="field_one,field_two">
                <lst>
                    <str name="field">field_one</str>
                    <int name="value">3</int>
                    <int name="count">562</int>
                    <arr name="pivot">
                        <lst>
                            <str name="field">field_two</str>
                            <bool name="value">true</bool>
                            <int name="count">347</int>
                        </lst>
                        <lst>
                            <str name="field">field_two</str>
                            <bool name="value">false</bool>
                            <int name="count">215</int>
                        </lst>
                    </arr>
                </lst>
                <lst>
                    <str name="field">field_one</str>
                    <int name="value">12</int>
                    <int name="count">105</int>
                    <arr name="pivot">
                        <lst>
                            <str name="field">field_two</str>
                            <bool name="value">true</bool>
                            <int name="count">97</int>
                        </lst>
                        <lst>
                            <str name="field">field_two</str>
                            <bool name="value">false</bool>
                            <int name="count">8</int>
                        </lst>
                    </arr>
                </lst>
            </arr>
        </lst>
    </lst>
</response>

示例查詢:

http://192.168.100.145:7983/solr/<collection>/select?facet.pivot=field_one,field_two&facet=on&fl=idField,field_one&indent=on&q=field_one:(3%2012)&rows=1&wt=xml

如果您可以更改要發布到solr的數據,那么我建議您創建一個字符串字段,該字段將具有category_id和group_id的串聯。 例如,如果category_id = 5且group_id = 2,那么您的字符串字段可以是: - '5,2'(使用','或任何其他字符作為分隔符)。 然后,您可以對此字符串字段進行分組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM