Hi Haoyue,
The short answer is that criteria are global objects, and their IDs
never change and are the same across all ad groups, campaigns, etc.
When you do change one of these fields (like matchType) you are
actually swapping in a different global criterion. The confusion
comes from the fact that extra properties can be assigned to a
criterion that are specific to the ad group they are in and do not
affect the criterion ID. In the v13 API it was unclear which fields
were part of the criterion and which were extra properties. In the
v2009 API this has been made explicit with the distinction between an
AdGroupCriterion and a Criterion.
For example, the BiddableAdGroupCriterion object contains all the
configuration properties of how to use the criterion within the ad
group ( see
http://code.google.com/apis/adwords/v2009/docs/reference/AdGroupCriterionService.BiddableAdGroupCriterion.html
). The Keyword object contains the fields that are actually part of
the criterion ( see
http://code.google.com/apis/adwords/v2009/docs/reference/AdGroupCriterionService.Keyword.html
). The BiddableAdGroupCriterion is like a wrapper for the Keyword
that adds extra information, but the ID of the Keyword only depends on
the properties in that object.
I hope this helps, let me know if you have any questions.
Best,
- Eric Koleda, AdWords API Team