Reserved de-dupe rules












3















I'm wanting to refine the de-duping rules, but first of all I'd like to find out exactly what the predefined rules are before I create my own. They are reserved, so you can't edit them, which is fine, but it only tells you which fields they use and not what the weights and thresholds are so the full behaviour is not clear.










share|improve this question



























    3















    I'm wanting to refine the de-duping rules, but first of all I'd like to find out exactly what the predefined rules are before I create my own. They are reserved, so you can't edit them, which is fine, but it only tells you which fields they use and not what the weights and thresholds are so the full behaviour is not clear.










    share|improve this question

























      3












      3








      3


      1






      I'm wanting to refine the de-duping rules, but first of all I'd like to find out exactly what the predefined rules are before I create my own. They are reserved, so you can't edit them, which is fine, but it only tells you which fields they use and not what the weights and thresholds are so the full behaviour is not clear.










      share|improve this question














      I'm wanting to refine the de-duping rules, but first of all I'd like to find out exactly what the predefined rules are before I create my own. They are reserved, so you can't edit them, which is fine, but it only tells you which fields they use and not what the weights and thresholds are so the full behaviour is not clear.







      duplicate-contacts






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 10 hours ago









      Mick KahnMick Kahn

      641216




      641216






















          3 Answers
          3






          active

          oldest

          votes


















          2














          If you have access to the database type



          SELECT * from civicrm_dedupe_rule r inner join civicrm_dedupe_rule_group rg on rg.id = r.dedupe_rule_group_id;



          which will give you a table which isn't pretty but is mostly understandable.






          share|improve this answer


























          • Ah you're right. I'll update answer.

            – Demerit
            9 hours ago











          • Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

            – Mick Kahn
            7 hours ago



















          2














          Using Demerit's correct and useful answer above, here are the details in plain text of the three pre-configured rules that you can't see by the normal method, so may be of use to others:



          Name and Email (reserved): Supervised: Individual



          First Name: Length "null", Weight 5



          Last Name: Length "null", Weight 7



          Email: Length "null", Weight 10



          Threshold 20



          Email (reserved): Unsupervised: Individual



          Email: Length "null", Weight 10



          Threshold 20



          Name and Address (reserved): General: Individual



          First Name: Length "null", Weight 5



          Last Name: Length "null", Weight 5



          Street Address: Length "null", Weight 5



          Middle Name: Length "null", Weight 1



          Suffix: Length "null", Weight 1



          Threshold: 15






          share|improve this answer
























          • Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

            – petednz - fuzion
            5 hours ago













          • For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

            – petednz - fuzion
            5 hours ago



















          0














          Demerit's and Mick's answers are incorrect for the (built-in) reserved rules - though it's definitely confusing!



          If a RuleGroup has a value in the name field, and that name corresponds to a filename in CRM/Dedupe/BAO/QueryBuilder, then the customized SQL in those files will be used. The existing entries in civicrm_rule for those RuleGroups are holdovers from before that system existed, and editing them has no effect.



          "Standard" dedupe rules with multiple criteria are very inefficient compared to handwritten SQL, which is why this is a valuable technique. You can create your own handwritten queries with hook_civicrm_dedupe, and the Veda dedupe extension has a number of excellent examples. Note that this extension doesn't work on modern Civi because of some of its other functions, but the dedupe rules can be ripped out into something else.



          Finally - I learned just yesterday that the built-in handwritten dedupe rules seem to execute different SQL when comparing in Unsupervised/Supervised mode (a single contact) vs. General mode (find all dupes). While I haven't proved it, I suspect that if you're in the rare scenario of needing to optimize your unsupervised/supervised dedupes, creating a new class to extend CRM_Dedupe_BAO_QueryBuilder is the way to go. I just posted org.agbu.optimizeddedupe to provide an example of this.






          share|improve this answer
























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "605"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            noCode: true, onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcivicrm.stackexchange.com%2fquestions%2f29155%2freserved-de-dupe-rules%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            If you have access to the database type



            SELECT * from civicrm_dedupe_rule r inner join civicrm_dedupe_rule_group rg on rg.id = r.dedupe_rule_group_id;



            which will give you a table which isn't pretty but is mostly understandable.






            share|improve this answer


























            • Ah you're right. I'll update answer.

              – Demerit
              9 hours ago











            • Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

              – Mick Kahn
              7 hours ago
















            2














            If you have access to the database type



            SELECT * from civicrm_dedupe_rule r inner join civicrm_dedupe_rule_group rg on rg.id = r.dedupe_rule_group_id;



            which will give you a table which isn't pretty but is mostly understandable.






            share|improve this answer


























            • Ah you're right. I'll update answer.

              – Demerit
              9 hours ago











            • Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

              – Mick Kahn
              7 hours ago














            2












            2








            2







            If you have access to the database type



            SELECT * from civicrm_dedupe_rule r inner join civicrm_dedupe_rule_group rg on rg.id = r.dedupe_rule_group_id;



            which will give you a table which isn't pretty but is mostly understandable.






            share|improve this answer















            If you have access to the database type



            SELECT * from civicrm_dedupe_rule r inner join civicrm_dedupe_rule_group rg on rg.id = r.dedupe_rule_group_id;



            which will give you a table which isn't pretty but is mostly understandable.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 9 hours ago

























            answered 10 hours ago









            DemeritDemerit

            4,0662621




            4,0662621













            • Ah you're right. I'll update answer.

              – Demerit
              9 hours ago











            • Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

              – Mick Kahn
              7 hours ago



















            • Ah you're right. I'll update answer.

              – Demerit
              9 hours ago











            • Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

              – Mick Kahn
              7 hours ago

















            Ah you're right. I'll update answer.

            – Demerit
            9 hours ago





            Ah you're right. I'll update answer.

            – Demerit
            9 hours ago













            Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

            – Mick Kahn
            7 hours ago





            Thanks that tells me what I need, so I have deleted my earlier comment on your previous version of the answer

            – Mick Kahn
            7 hours ago











            2














            Using Demerit's correct and useful answer above, here are the details in plain text of the three pre-configured rules that you can't see by the normal method, so may be of use to others:



            Name and Email (reserved): Supervised: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 7



            Email: Length "null", Weight 10



            Threshold 20



            Email (reserved): Unsupervised: Individual



            Email: Length "null", Weight 10



            Threshold 20



            Name and Address (reserved): General: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 5



            Street Address: Length "null", Weight 5



            Middle Name: Length "null", Weight 1



            Suffix: Length "null", Weight 1



            Threshold: 15






            share|improve this answer
























            • Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

              – petednz - fuzion
              5 hours ago













            • For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

              – petednz - fuzion
              5 hours ago
















            2














            Using Demerit's correct and useful answer above, here are the details in plain text of the three pre-configured rules that you can't see by the normal method, so may be of use to others:



            Name and Email (reserved): Supervised: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 7



            Email: Length "null", Weight 10



            Threshold 20



            Email (reserved): Unsupervised: Individual



            Email: Length "null", Weight 10



            Threshold 20



            Name and Address (reserved): General: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 5



            Street Address: Length "null", Weight 5



            Middle Name: Length "null", Weight 1



            Suffix: Length "null", Weight 1



            Threshold: 15






            share|improve this answer
























            • Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

              – petednz - fuzion
              5 hours ago













            • For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

              – petednz - fuzion
              5 hours ago














            2












            2








            2







            Using Demerit's correct and useful answer above, here are the details in plain text of the three pre-configured rules that you can't see by the normal method, so may be of use to others:



            Name and Email (reserved): Supervised: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 7



            Email: Length "null", Weight 10



            Threshold 20



            Email (reserved): Unsupervised: Individual



            Email: Length "null", Weight 10



            Threshold 20



            Name and Address (reserved): General: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 5



            Street Address: Length "null", Weight 5



            Middle Name: Length "null", Weight 1



            Suffix: Length "null", Weight 1



            Threshold: 15






            share|improve this answer













            Using Demerit's correct and useful answer above, here are the details in plain text of the three pre-configured rules that you can't see by the normal method, so may be of use to others:



            Name and Email (reserved): Supervised: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 7



            Email: Length "null", Weight 10



            Threshold 20



            Email (reserved): Unsupervised: Individual



            Email: Length "null", Weight 10



            Threshold 20



            Name and Address (reserved): General: Individual



            First Name: Length "null", Weight 5



            Last Name: Length "null", Weight 5



            Street Address: Length "null", Weight 5



            Middle Name: Length "null", Weight 1



            Suffix: Length "null", Weight 1



            Threshold: 15







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 7 hours ago









            Mick KahnMick Kahn

            641216




            641216













            • Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

              – petednz - fuzion
              5 hours ago













            • For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

              – petednz - fuzion
              5 hours ago



















            • Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

              – petednz - fuzion
              5 hours ago













            • For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

              – petednz - fuzion
              5 hours ago

















            Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

            – petednz - fuzion
            5 hours ago







            Not blaming you at all but some of those look a bit nuts. Is it possible you mis-copied the Email Unsupervised? Having Email = 10 and Threshold = 20 does not seem healthy. I do not see that on a site i just checked. The Threshold was set to 10.

            – petednz - fuzion
            5 hours ago















            For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

            – petednz - fuzion
            5 hours ago





            For the Name and Address (which I do see the same on a db i just checked) have Middle Name = 1 and Suffix = 1 for a Threshold of 15 seems pointless as they will never play a role in determining someone is a match will they?

            – petednz - fuzion
            5 hours ago











            0














            Demerit's and Mick's answers are incorrect for the (built-in) reserved rules - though it's definitely confusing!



            If a RuleGroup has a value in the name field, and that name corresponds to a filename in CRM/Dedupe/BAO/QueryBuilder, then the customized SQL in those files will be used. The existing entries in civicrm_rule for those RuleGroups are holdovers from before that system existed, and editing them has no effect.



            "Standard" dedupe rules with multiple criteria are very inefficient compared to handwritten SQL, which is why this is a valuable technique. You can create your own handwritten queries with hook_civicrm_dedupe, and the Veda dedupe extension has a number of excellent examples. Note that this extension doesn't work on modern Civi because of some of its other functions, but the dedupe rules can be ripped out into something else.



            Finally - I learned just yesterday that the built-in handwritten dedupe rules seem to execute different SQL when comparing in Unsupervised/Supervised mode (a single contact) vs. General mode (find all dupes). While I haven't proved it, I suspect that if you're in the rare scenario of needing to optimize your unsupervised/supervised dedupes, creating a new class to extend CRM_Dedupe_BAO_QueryBuilder is the way to go. I just posted org.agbu.optimizeddedupe to provide an example of this.






            share|improve this answer




























              0














              Demerit's and Mick's answers are incorrect for the (built-in) reserved rules - though it's definitely confusing!



              If a RuleGroup has a value in the name field, and that name corresponds to a filename in CRM/Dedupe/BAO/QueryBuilder, then the customized SQL in those files will be used. The existing entries in civicrm_rule for those RuleGroups are holdovers from before that system existed, and editing them has no effect.



              "Standard" dedupe rules with multiple criteria are very inefficient compared to handwritten SQL, which is why this is a valuable technique. You can create your own handwritten queries with hook_civicrm_dedupe, and the Veda dedupe extension has a number of excellent examples. Note that this extension doesn't work on modern Civi because of some of its other functions, but the dedupe rules can be ripped out into something else.



              Finally - I learned just yesterday that the built-in handwritten dedupe rules seem to execute different SQL when comparing in Unsupervised/Supervised mode (a single contact) vs. General mode (find all dupes). While I haven't proved it, I suspect that if you're in the rare scenario of needing to optimize your unsupervised/supervised dedupes, creating a new class to extend CRM_Dedupe_BAO_QueryBuilder is the way to go. I just posted org.agbu.optimizeddedupe to provide an example of this.






              share|improve this answer


























                0












                0








                0







                Demerit's and Mick's answers are incorrect for the (built-in) reserved rules - though it's definitely confusing!



                If a RuleGroup has a value in the name field, and that name corresponds to a filename in CRM/Dedupe/BAO/QueryBuilder, then the customized SQL in those files will be used. The existing entries in civicrm_rule for those RuleGroups are holdovers from before that system existed, and editing them has no effect.



                "Standard" dedupe rules with multiple criteria are very inefficient compared to handwritten SQL, which is why this is a valuable technique. You can create your own handwritten queries with hook_civicrm_dedupe, and the Veda dedupe extension has a number of excellent examples. Note that this extension doesn't work on modern Civi because of some of its other functions, but the dedupe rules can be ripped out into something else.



                Finally - I learned just yesterday that the built-in handwritten dedupe rules seem to execute different SQL when comparing in Unsupervised/Supervised mode (a single contact) vs. General mode (find all dupes). While I haven't proved it, I suspect that if you're in the rare scenario of needing to optimize your unsupervised/supervised dedupes, creating a new class to extend CRM_Dedupe_BAO_QueryBuilder is the way to go. I just posted org.agbu.optimizeddedupe to provide an example of this.






                share|improve this answer













                Demerit's and Mick's answers are incorrect for the (built-in) reserved rules - though it's definitely confusing!



                If a RuleGroup has a value in the name field, and that name corresponds to a filename in CRM/Dedupe/BAO/QueryBuilder, then the customized SQL in those files will be used. The existing entries in civicrm_rule for those RuleGroups are holdovers from before that system existed, and editing them has no effect.



                "Standard" dedupe rules with multiple criteria are very inefficient compared to handwritten SQL, which is why this is a valuable technique. You can create your own handwritten queries with hook_civicrm_dedupe, and the Veda dedupe extension has a number of excellent examples. Note that this extension doesn't work on modern Civi because of some of its other functions, but the dedupe rules can be ripped out into something else.



                Finally - I learned just yesterday that the built-in handwritten dedupe rules seem to execute different SQL when comparing in Unsupervised/Supervised mode (a single contact) vs. General mode (find all dupes). While I haven't proved it, I suspect that if you're in the rare scenario of needing to optimize your unsupervised/supervised dedupes, creating a new class to extend CRM_Dedupe_BAO_QueryBuilder is the way to go. I just posted org.agbu.optimizeddedupe to provide an example of this.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 1 hour ago









                Jon G - Megaphone TechJon G - Megaphone Tech

                27.4k11872




                27.4k11872






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to CiviCRM Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcivicrm.stackexchange.com%2fquestions%2f29155%2freserved-de-dupe-rules%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    How to label and detect the document text images

                    Vallis Paradisi

                    Tabula Rosettana